1
我正在嘗試使用cursor.execute(sql, args)
語法將INSERT
轉換爲MySQL
。這就是我目前有:MySQL + Python:並非在字符串格式化過程中轉換的所有參數
# data = {...}
qmarks = ', '.join('?' * len(data))
query = "INSERT INTO title (%s) VALUES (%s)" %(qmarks, qmarks)
args = data.keys() + data.values()
print len(args), print len(data)
cursor.execute(query, args)
TypeError: not all arguments converted during string formatting
我檢查的args
(22)和quarks
(11×2 = 22)的長度,並且它們似乎是相同的。什麼導致了這個錯誤,我需要改變什麼?
更新:當我嘗試做字符串使用%s
格式,它也拋出一個錯誤:
>>> data={'provider':'asdf', 'vendor_id': '1234'}
>>> format = ', '.join(['%s'] * len(data))
>>> query = "INSERT INTO title (%s) VALUES (%s)" %(format, format)
>>> query
'INSERT INTO title (%s, %s) VALUES (%s, %s)'
>>> cursor.execute(query, args)
Traceback (most recent call last):
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax
to use near ''vendor_id', 'provider') VALUES ('1234', 'asdf')' at line 1")
我認爲這是與事實,列定義字符串做:
而不是INSERT INTO title ('vendor_id', 'provider') VALUES ('1234', 'asdf')
:
INSERT INTO title (vendor_id, provider) VALUES ('1234', 'asdf')
有沒有辦法在這裏使用字符串格式,但通過變量而不是字符串?
謝謝。我更新了字符串格式,但它仍然引發某種語法錯誤(參見上文)。 – David542 2012-02-18 00:24:17
@ David542 - 我認爲這是由列名引起的,很確定您需要將字段列名直接插入到查詢中,然後只有'%s'替換值。所以它看起來像這樣:'INSERT INTO title(vendor_id,provider)VALUES(%s,%s)'。 – 2012-02-18 00:30:20
但是後來我失去了'dict'的順序(在字典中我有大約100 k,v對) – David542 2012-02-18 00:36:26