MySQL 连接器/Python - 将 python 变量插入 MySQL 表

Posted

技术标签:

【中文标题】MySQL 连接器/Python - 将 python 变量插入 MySQL 表【英文标题】:MySQL Connector/Python - insert python variable to MySQL table 【发布时间】:2013-06-07 20:28:46 【问题描述】:

我正在尝试将 python 变量插入到 python 脚本中的 mysql 表中,但它不起作用。这是我的代码

add_results=("INSERT INTO account_cancel_predictions"
            "(account_id,21_day_probability,flagged)"
            "Values(%(account_id)s,%(21_day_probability)s,%(flagged)s)")

data_result=
    'account_id':result[1,0],
    '21_day_probability':result[1,1],
    'flagged':result[1,2]


cursor.execute(add_results,data_result)

cnx.commit()
cursor.close()
cnx.close()

这会出错

ProgrammingError: Failed processing pyformat-parameters; 'MySQLConverter' object has no attribute '_float64_to_mysql'

但是,当我将变量名称 result[1,0]result[1,1]result[1,2] 替换为它们的实际数值时,它确实有效。我怀疑 python 传递的是实际的变量名,而不是它们持有的值。我该如何解决这个问题?

【问题讨论】:

connection = engine.connect() connection.execute(""" update Players set Gold =(?) where Name=(?)""",(gold,name)) ,也许只是一个fanboy 的事情,但我倾向于将 sqlalchemy 与 python 一起使用,这往往会简化大部分内容,而且我从来没有遇到过使用通配符的问题 【参考方案1】:

假设你使用mysql.connector(我想你是),定义你自己的转换器类:

class NumpyMySQLConverter(mysql.connector.conversion.MySQLConverter):
    """ A mysql.connector Converter that handles Numpy types """

    def _float32_to_mysql(self, value):
        return float(value)

    def _float64_to_mysql(self, value):
        return float(value)

    def _int32_to_mysql(self, value):
        return int(value)

    def _int64_to_mysql(self, value):
        return int(value)

config = 
    'user'    : 'user',
    'host'    : 'localhost',
    'password': 'xxx',
    'database': 'db1'


conn = mysql.connector.connect(**config)
conn.set_converter_class(NumpyMySQLConverter)

【讨论】:

不错的解决方案!但是,我必须包含一个 __init__ 函数才能使其工作。可能是因为我的版本。我在conversion.py 中使用了类似于原始MySQLConverter 类的东西。 这段代码放在哪里?在 Jupyter 笔记本中,在 mysql-connector 库中……?一般来说,我对 mysql-connector 或 OOP 不太熟悉。同样,__init__ 会去哪里?另见:***.com/questions/25093950/…【参考方案2】:

您传递的其中一个值可能是 MySQL 连接器无法识别的 numpy.float64 类型。在填充字典时将其转换为真正的 python float

【讨论】:

【参考方案3】:

如果您使用的是 python 3 及更高版本,只需使用 mysqlclient pip install mysqlclient。 django推荐的,其他驱动都不好。

【讨论】:

以上是关于MySQL 连接器/Python - 将 python 变量插入 MySQL 表的主要内容,如果未能解决你的问题,请参考以下文章

python操作数据库

_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':问题的解决 mysql安装pyth

MySQL 连接器/Python - 将 python 变量插入 MySQL 表

在FTP失败连接Pyth3.6中循环

连接两个范围函数结果

尝试将日期作为python中的输入并使用mysql连接器更新mysql表中的值