2013-10-23 190 views
-2

我想創建一個Python程序,它將查詢一個URL並生成一個JSON文件。我需要在來自SQL查詢的URL末尾傳遞一個參數。格式化一個字符串變量

我導入了requests庫。

當我嘗試在URL中傳遞參數時,出現'TypeError:float argument required,not str'錯誤消息。

只有一個從查詢產生的結果列:

id 
2 
3 
4 

下面是我想出了:

import MySQLdb 
import requests 

con=MySQLdb.connect(host="localhost",user="test", passwd="test", db ="mfg") 
cur = con.cursor() 
select=("select id from tblMfg") 

cur.execute(select) 
result=cur.fetchall() 
for i in result: 
    col =i[0] 
    col1=str(col) 
    url = 'http://appl.xyz.net:8080/app/content/pq/doQuery?solution=nd&path=&file=Test.nd&dataAccessId=1&paramid=%d' % col1 
    user = 'abc' 
    password ='testgo' 
    data = requests.get(url, auth=(user, password)) 
    json_data=data.json() 
    print json_data 
+1

... Python還告訴你*錯誤在哪裏(並且推斷它與URL或參數傳遞無關)。 –

+0

你實際上不得不離開你的方式來得到這個錯誤,首先使用'%d'而不是'%s'來表示「我絕對肯定希望這隻能使用數字而不是字符串」,然後執行'col1 = str(col)'說「我絕對肯定希望這是一個字符串,而不是一個數字」。然後,當Python說「嘿,那個字符串不是數字」時,你不明白嗎? (也許它們都是_actually_意思是「我複製並粘貼了這行代碼而根本不理解它」) – abarnert

回答

2

離開creating parametersrequests框架來代替:

params = {'solution': 'nd', 'path': '', 'file': 'Test.nd', 'dataAccessId': '1', 
      'paramid': str(col[0])} 
url = 'http://appl.xyz.net:8080/app/content/pq/doQuery' 
user = 'abc' 
password ='testgo' 
data = requests.get(url, auth=(user, password), params=params) 
+0

它說:TypeError:'long'對象沒有屬性'__getitem__'。你能顯示完整的代碼嗎? – Rio

+0

然後我們把它串起來;更新。 –

+0

仍然沒有運氣:TypeError:'long'對象沒有屬性'__getitem__'。我們從表中獲取整數值並傳遞到url – Rio

0

錯誤消息'TypeError:float argument require d,not str'也會在您嘗試格式化包含(意外)裸體百分號的字符串時發生。
實施例:

>>> print "fail 100% for serverid|%s| " % ("a") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: float argument required, not str 
>>> 

的「F」「100%」被解釋爲要求一個浮點參數,而這是簡單地我smudgefingers離開斷第二百分號之後。

>>> print "fail 100%% for serverid|%s| " % ("a") 
fail 100% for serverid|a| 
>>> 

工作正常。如果「100%」後面的單詞以d或o或s開頭,則會得到稍微不同的錯誤消息。

我很不幸地發生了這樣的情況,在一個2嵌套的try-except內部發生了幾個調用層,所以這個錯誤出現在距離引起它一英里的地方。

-1
print ("float_value : %f , digit_value : %d , string_value : %s" % (3.4, 5, 'somestring')) 
float_value : 3.400000 , digit_value : 5 , string_value : somestring 
+0

你能補充一些解釋嗎? – pableiros

相關問題