Python MySql 连接器准备语句和字典 class
Python MySql Connector prepared statement and dictionary class
如何使我的游标既是准备好的语句又是字典。
我有以下内容。
cursor(cursor_class = MySQLCursorPrepared)
prints <class 'mysql.connector.cursor.MySQLCursorPrepared'>
cursor(dictionary = True)
prints <class 'mysql.connector.cursor.MySQLCursorDict'>
所以我正在用字典覆盖准备好的语句。我正在为 python3 使用 mysql 连接器。
我试过了
cursor(prepared=True,dictionary=True)
错误
Cursor not available with given criteria: dictionary, prepared
有趣的是
cursor(cursor_class = MySQLCursorPrepared,dictionary = True)
我没有收到任何错误,但数据不是字典类型。
我也遇到了同样的问题。 Prepared 和 Dictionary 不能一起工作。
我报告了错误:https://bugs.mysql.com/bug.php?id=92700
现在我们等待 ;)
这个天真的解决方法似乎对我有用 - 如果我禁用 SSL,我可以在 'strace' 输出中看到多个相同的查询只发送到服务器一次,并且当我迭代时我肯定会得到字典在光标的行上:
from mysql.connector.cursor import MySQLCursorDict, MySQLCursorPrepared
class PreparedDictionaryCursor(MySQLCursorDict, MySQLCursorPrepared):
pass
用行值压缩 cursor.column_names
是一个很好的解决方法:
cursor = connection.cursor(prepared=True)
query = 'SELECT foo, bar FROM some_table WHERE a = %s AND b = %s'
a = 1
b = 42
cursor.execute(query, [a, b])
rows = cursor.fetchall()
for row in rows:
result = dict(zip(cursor.column_names, row))
print(result['foo'], result['bar'])
有关 MySQLCursor.column_names
的文档,请参阅 https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-column-names.html。
如何使我的游标既是准备好的语句又是字典。 我有以下内容。
cursor(cursor_class = MySQLCursorPrepared)
prints <class 'mysql.connector.cursor.MySQLCursorPrepared'>
cursor(dictionary = True)
prints <class 'mysql.connector.cursor.MySQLCursorDict'>
所以我正在用字典覆盖准备好的语句。我正在为 python3 使用 mysql 连接器。
我试过了
cursor(prepared=True,dictionary=True)
错误
Cursor not available with given criteria: dictionary, prepared
有趣的是
cursor(cursor_class = MySQLCursorPrepared,dictionary = True)
我没有收到任何错误,但数据不是字典类型。
我也遇到了同样的问题。 Prepared 和 Dictionary 不能一起工作。
我报告了错误:https://bugs.mysql.com/bug.php?id=92700
现在我们等待 ;)
这个天真的解决方法似乎对我有用 - 如果我禁用 SSL,我可以在 'strace' 输出中看到多个相同的查询只发送到服务器一次,并且当我迭代时我肯定会得到字典在光标的行上:
from mysql.connector.cursor import MySQLCursorDict, MySQLCursorPrepared
class PreparedDictionaryCursor(MySQLCursorDict, MySQLCursorPrepared):
pass
用行值压缩 cursor.column_names
是一个很好的解决方法:
cursor = connection.cursor(prepared=True)
query = 'SELECT foo, bar FROM some_table WHERE a = %s AND b = %s'
a = 1
b = 42
cursor.execute(query, [a, b])
rows = cursor.fetchall()
for row in rows:
result = dict(zip(cursor.column_names, row))
print(result['foo'], result['bar'])
有关 MySQLCursor.column_names
的文档,请参阅 https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-column-names.html。