使用Python将字段插入MySQL

时间:2017-02-16 05:34:35

标签: mysql python-2.7 mysql-workbench

当我尝试在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

2 个答案:

答案 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()