gpt4 book ai didi

python - 无法在准备好的 INSERT 语句中的 python mysql.connector 中使用 None (NULL) 值

转载 作者:可可西里 更新时间:2023-11-01 06:52:26 25 4
gpt4 key购买 nike

当尝试使用准备好的游标并插入 NULL 值时,mysql.connector 报告错误:

mysql.Error: 1210 (HY000): Incorrect arguments to mysqld_stmt_execute

下面是一段代码,可以准确地说明这一点。

from __future__ import print_function
import mysql.connector

def execsql(cursor, sqlstmt):
try:
cursor.execute(sqlstmt)
except mysql.connector.Error as e:
print("mysql.Error: %s" % e)
print(cursor._executed, '\n')


def execsqlwithparams(cursor, sqlstmt, params):
try:
cursor.execute(sqlstmt, params)
except mysql.connector.Error as e:
print("mysql.Error: %s" % e)
print(cursor._executed, "params:", params, '\n')


def main():
print("mysql.connector.__version__", mysql.connector.__version__)
db = mysql.connector.connect(db="test")
print("mysql.db. get server version", db.get_server_version())
c1 = db.cursor()
c2 = db.cursor(prepared=False)
c3 = db.cursor(prepared=True)

execsql(c1, "drop table if exists test1")
execsql(c1, "create table test1 (col1 int not null, col2 int null, primary key(col1))")

print("insert with pure SQL")
execsql(c1, "insert into test1(col1,col2) values (1, 1)")
execsql(c1, "insert into test1(col1,col2) values (2, NULL)")

print("insert with prepared statement format %s")
sql = "insert into test1(col1,col2) values (%s, %s)"
execsql(c2, sql)
execsqlwithparams(c2, sql, (20, 20))
execsqlwithparams(c2, sql, (21, None))

print("insert with prepared statement format %s using prepared cursor")
sql = "insert into test1(col1,col2) values (%s, %s)"
execsql(c3, sql)
execsqlwithparams(c3, sql, (30, 30))
execsqlwithparams(c3, sql, (31, None))

execsql(c1, "select * from test1")
row = c1.fetchone()
while row:
print(row)
row = c1.fetchone()
db.close()


if __name__ == '__main__':
status = main()

输出是这样的:

mysql.connector.__version__ 1.2.2
mysql.db. get server version (5, 5, 37)
drop table if exists test1

create table test1 (col1 int not null, col2 int null, primary key(col1))

insert with pure SQL
insert into test1(col1,col2) values (1, 1)
insert into test1(col1,col2) values (2, NULL)

insert with prepared statement format %s
mysql.Error: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s, %s)' at line 1
insert into test1(col1,col2) values (%s, %s)
insert into test1(col1,col2) values (20, 20) params: (20, 20)
insert into test1(col1,col2) values (21, NULL) params: (21, None)

insert with prepared statement format %s using prepared cursor
insert into test1(col1,col2) values (%s, %s)
insert into test1(col1,col2) values (%s, %s) params: (30, 30)

mysql.Error: 1210 (HY000): Incorrect arguments to mysqld_stmt_execute
insert into test1(col1,col2) values (%s, %s) params: (31, None)

select * from test1

(1, 1)
(2, None)
(20, 20)
(21, None)
(30, 30)

意想不到的结果是这样的:

mysql.Error: 1210 (HY000): Incorrect arguments to mysqld_stmt_execute
insert into test1(col1,col2) values (%s, %s) params: (31, None)

数据库中缺少行 (31, None)。

最佳答案

与上一个案例中传递的 None 相关的问题可能是由于 None 没有被解释为表中定义的类型。

关于python - 无法在准备好的 INSERT 语句中的 python mysql.connector 中使用 None (NULL) 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24208962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com