【问题标题】:How do I check why my INSERT query is not working?如何检查为什么我的 INSERT 查询不起作用?
【发布时间】:2012-04-02 13:21:54
【问题描述】:
conn = MySQLdb.connect(host=IP,user='john',passwd='ab2nng',db='mydb')
cursor = conn.cursor()

#this works.
cursor.execute("select * from crawl_log")
res = cursor.fetchall()
print res

#this doesn't work.
cursor.execute("insert into crawl_log(k, v) values(%s, %s)", ('test','test'))

我怎么知道它为什么不起作用?没有错误打印,什么都没有。

【问题讨论】:

  • 很难从 mysqldb 模块文档中看出,但您可能需要在替换变量周围加上引号,如 cursor.execute("insert into crawl_log(k, v) values('%s', '%s')", ('test','test'))。 %s 语法看起来像 sprintf 格式,暗示它是文本替换而不是绑定变量......但文档没有说任何一种方式。
  • 顺便说一句,在调试数据库代码时,有时以交互模式与数据库对话会很有帮助(即直接在数据库中输入 SQL,使用 phpMyAdmin 或类似方法。)这有助于确定是否是您的 SQL错了,或者你的 Python 代码错了。

标签: python mysql database mysql-python


【解决方案1】:

默认情况下,它将启动一个事务,该事务需要在任何影响数据更改的语句之后提交。插入后您是否尝试过conn.commit()

【讨论】:

    【解决方案2】:

    此类问题的典型原因是行/表/数据库名称拼写错误

    请仔细检查,这一直是我搞砸的主要问题

    另一件事是行/表/数据库名称可能太短,无法解决此问题 在名称周围添加'' 例如,key 是'key'

    希望这能解决您的问题

    【讨论】:

    • 不。一切都是正确的。我什至更改了表名和列名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多