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)
如果您的查询是正确的(检查 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)
用于终止数据库连接。我希望这对你有用。