【问题标题】:Python operators pymysqlPython 运算符 pymysql
【发布时间】:2013-06-13 12:27:30
【问题描述】:

我在使用 pymysql 和 python 运算符时遇到了一些麻烦。 不过,我对 python 运算符了解不多。

我想在数据库中插入一些值。代码:

import pymysql
conn = pymysql.connect(host='127.0.0.1', unix_socket='/Applications/MAMP/tmp/mysql/mysql.sock', user='root', passwd='root', db='db2', charset='utf8')
cur = conn.cursor()
v = (123 , 'foobarfoobar', 'foo', 1241, 3, 132 )
cur.execute("INSERT INTO celebs(num_id, Text, Handle, Followers, RT, Timestamp) VALUES (?,?,?,?,?,?)", v)

记录一下mySQL结构是INT (PRI), INT, TEXT, VARCHAR, INT, INT, VARCHAR

我运行它,我得到TypeError: not all arguments converted during string formatting

任何细节如何解决它,可能还有一些解释操作员如何在 python 中工作。 我认为在 php 中更容易:$a = 22; echo "$a days";

更新:

我直接使用 Insert into 还是没有插入数据:

cur.execute("INSERT INTO celebs (num_id, Text, Handle, Followers, RT, Timestamp) VALUES (123 , 'foobarfoobar', 'foo', 1241, 3, 132 );"  )

【问题讨论】:

标签: python mysql operators pymysql


【解决方案1】:

我认为错误出在 v 的数据结构中。它应该是列表而不是元组

【讨论】:

    【解决方案2】:

    根据source codeparamstyleformat,所以您需要更改...

    cur.execute("INSERT INTO ... VALUES (?,?,?,?,?,?)", v)
    

    ...到...

    cur.execute("INSERT INTO ... VALUES (%s,%s,%s,%s,%s,%s)", v)
    

    如果您使用的是事务存储引擎,例如 InnoDB,则必须在执行 INSERT 查询后通过调用 conn.commit() 显式提交事务。

    【讨论】:

    • 不幸的是,我也尝试过,但没有成功。 SELECT 虽然工作顺利。此外,如果我使用v 的值直接向mySQL 运行查询,它们会被正确插入......我认为pymysql 工作不正常。我正在尝试安装其他连接器
    • @DDL449 在什么情况下它不起作用?您是否遇到相同的错误或其他错误?
    • 脚本没有错误,但没有将值插入数据库
    • @DDL449 查看更新的答案。我还注意到您使用了INSERT INTO celebs('num_id', ...,这是无效的SQL - 它应该是INSERT INTO celebs(num_id, ...
    • @DDL449 你没看到我添加到关于conn.commit()的答案的部分吗?
    【解决方案3】:

    检查mysql引擎。 Pymysql 不适用于 InnDB,但当我从 InnoDB 更改为 MyISAM 时它工作正常

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2020-08-09
      • 1970-01-01
      相关资源
      最近更新 更多