2016-01-03 37 views
0

我想做一個相當簡單的選擇與日期作爲變量。但是,我總是最後接收的數據類型錯誤:如何在Python中將日期傳遞給MySQLdb?

today = datetime.datetime.date(datetime.datetime.now()) 
cur.execute('select nom from agenda,taverniers where agenda.id_t = taverniers.id_t and agenda.thedate = "%s"') %(today) 

它拋出一個異常:

moncal.py:61: Warning: Incorrect date value: '%s' for column 'thedate' at row 1 
cur.execute('select nom from agenda,taverniers where agenda.id_t = taverniers.id_t and agenda.thedate = "%s"') %(today) 
(...) 
TypeError: unsupported operand type(s) for %: 'long' and 'datetime.date'` 

我的數據庫具有數據:

mysql> select * from agenda 
    -> ; 
+------+------+------------+ 
| id_t | id_c | thedate | 
+------+------+------------+ 
| 3 | 5 | 2015-12-12 | 
| 1 | 6 | 2015-12-24 | 
+------+------+------------+ 

任何想法?謝謝。

回答

1

看起來是一個簡單的錯字。字符串格式化Python表達式應該像'%s'%variable而不是('%s') % variable

具體來說,使用

cur.execute('select nom from agenda,taverniers where agenda.id_t = taverniers.id_t and agenda.thedate = "%s"' % today) 

或考慮使用的推薦語法(見https://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute)與?佔位符:

cur.execute('select nom from agenda,taverniers where agenda.id_t = taverniers.id_t and agenda.thedate = "?"',(today,)) 
+0

嗯,我必須承認,這不是一個錯字,我的蟒蛇非常有限。感謝你倆@Limar和@Rogalski,就像一個魅力。有趣的是這個'aujourdhui = str('%s')%(今天)'沒有造成任何錯誤。 – wsteven

1

您與查詢行基本上是:

cur.execute('QUERY') % (today) 

它適用於%運算符到cur.execute('QUERY')返回值,它是整數。因此,您收到TypeError - long % datetime未定義爲長類型,而您實際上想要執行string % something操作。

要執行字符串格式化,您必須將%運算符移動到cur.execute參數 - 將其稱爲cur.execute('QUERY' % today)

相關問題