【问题标题】:MySQLdb/Python INSERT query not inserting data into tableMySQLdb/Python INSERT 查询未将数据插入表中
【发布时间】:2013-11-21 16:45:01
【问题描述】:

我正在尝试使用以下代码通过 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)

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

| 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 键不断增加。谢谢。

【问题讨论】:

    标签: python mysql innodb mysql-python


    【解决方案1】:

    如果您的查询正确(检查打印语句)并且数据库连接也正常,请执行此命令

    db.commit()
    

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

    db.autocommit(True)
    

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

    所有工作完成后使用命令

    db.close()
    

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

    【讨论】:

      【解决方案2】:

      您的代码似乎不正确,应该是

      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)
      

      【讨论】:

      • 我已更新以将 '' 包含在 %s 周围,但插入内容中仍然没有任何内容。 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)
      • 你关闭光标了吗?
      • 我明白了。在我给你的最后一条评论中,你可以看到我在第 4 个占位符上错过了一个 '。 (失败。)它现在可以工作,无论是否关闭光标。我认为,这个问题也与我之前的许多尝试相结合,我没有自动提交(这是在我发送问题之前添加的)。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多