MySQLdb/Python INSERT查询不将数据插入表中

tan*_*ndy 2 python mysql innodb mysql-python

我试图通过Python使用以下代码将值插入表中:

db = MySQLdb.connect(host="localhost",user="root",passwd="", db="x")
db.autocommit(True)
cur = db.cursor()
query = """INSERT INTO b (source_id,text,author,score,type,location) VALUES (%s,%s,%s,%s,%s,%s)""" % (1,Tweet.text,User.screen_name,score,search_type,User.location)
print query
cur.execute(query)
Run Code Online (Sandbox Code Playgroud)

我看到查询字符串正确填充了打印输出中的所有变量值(我没有对特殊字符做任何事情).但是这些值根本没有插入到数据库中.我的表看起来像这样:

| freebee | CREATE TABLE `b` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`source_id` int(5) NOT NULL,
`text` varchar(255) NOT NULL,
`author` varchar(120) DEFAULT NULL,
`score` tinyint(3) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`start_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`end_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`type` enum('food','event','stuff') NOT NULL,
`location` varchar(120) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=132 DEFAULT CHARSET=latin1 |
Run Code Online (Sandbox Code Playgroud)

值得注意的是,AUTO_INCREMENT设置为132.我在几分钟前手动测试了一个插入查询,并输入为id#132.我想这意味着我试图通过我的python脚本插入131次失败,但id键不断递增.谢谢.

小智 5

看起来你的代码不正确,它应该是

query = """INSERT INTO b (source_id,text,author,score,type,location) VALUES (%s,%s,%s,%s,%s,%s)"""
print query
cur.execute(query, (1,Tweet.text,User.screen_name,score,search_type,User.location))
Run Code Online (Sandbox Code Playgroud)

或者,文本VALUES(%s)应该是',如同** VALUES('%s', '%s') % (1, 2)

query = """INSERT INTO b (source_id,text,author,score,type,location) VALUES ('%s','%s','%s','%s','%s','%s')""" % (1,Tweet.text,User.screen_name,score,search_type,User.location)
print query
cur.execute(query)
Run Code Online (Sandbox Code Playgroud)


Ani*_*hal 5

如果您的查询是正确的(检查 Print 语句)并且数据库连接也没有问题,那么请执行此命令

db.commit()
Run Code Online (Sandbox Code Playgroud)

cur.execute(query) 之后。或者你也可以设置

db.autocommit(True)
Run Code Online (Sandbox Code Playgroud)

建立数据库连接后,在 python 脚本的开头。

完成所有工作后,使用命令

db.close()
Run Code Online (Sandbox Code Playgroud)

用于终止数据库连接。我希望这对你有用。