当我尝试在MySQL中输入以下命令时:
sql = """INSERT INTO event(summary, location, start, end, created, uid, description, calid) VALUES ('Dom seeing Carl - Test', 'City', '2016-11-30 22:30:00+00:00', '2016-11-30 23:00:00+00:00', '2016-11-29 00:39:13+00:00', '80462778A326E04EBD831336D01F2A2F051BA9E0A50E254ABADB036AF2BBE902040000008200E00074C5B7101A82E008000000005096FE958A49D201000000000000000010000000', 'New build happening…', '2')"""
我得到了Unicode错误。
我已经使用workbench控制台直接尝试了相同的插入到MySQL,它运行完美,我无法理解为什么Python会抱怨。 我正在使用的Python代码是:
db = MySQLdb.connect("192.168.100.1","root","test123","calendar1" )
cursor = db.cursor()
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
表定义:
# Field, Type, Null, Key, Default, Extra
uid, longtext, NO, , ,
summary, longtext, NO, , ,
location, varchar(255), NO, , ,
start, varchar(45), NO, , ,
end, varchar(45), NO, , ,
description, longtext, NO, , ,
created, varchar(45), NO, , ,
calid, int(11), NO, , ,
回溯错误:
TypeError: query() argument 1 must be string or read-only buffer, not tuple
答案 0 :(得分:0)
您可以尝试使用其他格式:
db = MySQLdb.connect("192.168.100.1","root","test123","calendar1" )
cursor = db.cursor()
try:
cursor.execute('INSERT INTO
event(summary, location, start, end, created, uid, description, calid)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)',
('Dom seeing Carl - Test', 'City', '2016-11-30 22:30:00+00:00', '2016-11-30 23:00:00+00:00', '2016-11-29 00:39:13+00:00', '80462778A326E04EBD831336D01F2A2F051BA9E0A50E254ABADB036AF2BBE902040000008200E00074C5B7101A82E008000000005096FE958A49D201000000000000000010000000', 'New build happening…', '2'))
db.commit()
except:
db.rollback()
db.close()
此question是相关的,并提供了建议使用此格式的原因。
答案 1 :(得分:0)
以下应该有效:
@valeas的答案是正确的,但是%s
应该用qoutes括起来,因为一旦字符串在占位符%s
中被替换,sql将无法理解字符串,因为它将被视为变量在最后的SQL语句中。
try:
cursor.execute("insert into event(summary, location, start, end,
created, uid, description, calid) values('%s', '%s', '%s',
'%s', '%s', '%s', '%s', '%s')"%('Dom seeing Carl - Test', 'City', '2016-11-30 22:30:00+00:00', '2016-11-30 23:00:00+00:00', '2016-11-29 00:39:13+00:00', '80462778A326E04EBD831336D01F2A2F051BA9E0A50E254ABADB036AF2BBE902040000008200E00074C5B7101A82E008000000005096FE958A49D201000000000000000010000000', 'New build happening…', '2'))
db.commit()
except:
db.rollback()