2013-11-09 100 views
2

我在尝试使用下面的代码通过Python将值插入表:MySQLdb的/ Python的INSERT查询不将数据插入到表

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) 

看到查询字符串被用在所有的变量值正确填充打印输出(我没有做任何特殊字符)。但是这些值不会被插入到数据库中。我的表看起来像这样:

| 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 | 

值得注意的是,AUTO_INCREMENT设置为132我手动测试插入查询几分钟前,它被输入为ID#132。我想这意味着我试图通过我的Python脚本插入131次失败,但ID密钥不断增加。谢谢。

回答

4

好像你的代码是不正确,应该是

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)) 

,或者在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) 
+0

我已经更新,使更改包括''围绕%s并且仍然没有插入。 ('%s','%s','%s','%s,'%s','%s' ')“”“%(1,Tweet.text,User.screen_name,score,search_type,User.location) – tandy

+0

你关闭游标吗? – GCooper

+0

我明白了。在我最后给你的评论中,你可以看到我错过了第四位占位者。 (失败)。它现在有效,无论是否关闭光标。我认为,这个问题也与我之前许多尝试的结果相结合,我不是自动提交的(在发送问题之前添加的)。谢谢! – tandy

1

如果您的查询是正确的(查询打印说明)和数据库连接也行,请执行这个命令

db.commit() 

之后cur.execute(查询)。或者,您也可以设置

db.autocommit(True) 

在进行数据库连接后,您的python脚本开始。

一旦所有工作完成使用命令

db.close() 

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

相关问题