使用pymysql在mysql中插入空日期

q0qdq0h2  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(365)

我正在尝试使用pymysql和参数将日期插入mysql数据库。有些行有一个日期字段,但有些行缺少特定的日期字段。空行给出类型为“pymysql.err.internalerror:(1292,“不正确的日期值:”)的错误。下面是一段重现错误的代码:

import pymysql
db=pymysql.connect("localhost","testuser","test1234","TESTDB")
cursor = db.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
print ("Database version : %s " % data)

query = "DROP TABLE IF EXISTS birthdays"
cursor.execute(query)

query="CREATE TABLE birthdays(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\
name VARCHAR(20),\
birthday DATE NULL DEFAULT NULL)"
cursor.execute(query)
db.commit()

birthdays={'David':'2014-05-22','Larry':'014-05-22', 'Barry':''}

for k,v in birthdays.items():
    print(k,v)
    query="INSERT INTO birthdays (name,birthday) VALUES ('%s','%s')"%(k,v)
    cursor.execute(query)
    db.commit()

db.close()

问题是巴里和他的空约会。我试过不跟巴里约会,但没用。如果我将其设置为“null”,并从date参数(('%s',%s)而不是('%s','%s')中删除引号,则对barry有效,但对其他参数有效。
事先非常感谢,
加布里埃尔·维达尔

yqkkidmi

yqkkidmi1#

您可以使用我刚刚在数组中更改的以下代码并设置“barry”:无,因为在使用mysqldb和cursor.execute()时,传递值none:

birthdays={'David':'2014-05-22','Larry':'014-05-22', 'Barry':None}

for k,v in birthdays.items():
    print(k,v)
    query="INSERT INTO birthdays (name,birthday) VALUES ('%s','%s')"%(k,v)
    cursor.execute(query)
    db.commit()

db.close()

详情请点击此处

brqmpdu1

brqmpdu12#

万一有人路过:
下面的代码片段解决了您遇到的问题。注意,您应该将execute语句保持在for循环之外,以尽量减少与数据库的连接数。

birthdays = {'David':'2014-05-22','Larry':'2014-05-22', 'Barry':'NULL'}
values = ""
for k,v in birthdays.items():
    values += "('%s', '%s')," % (k,v)

values = values[:-1].replace("'NULL'", "NULL")  # Drop the final comma and the quotes of NULL values
query = f"INSERT INTO birthdays (name,birthday) VALUES {values}"  # >= 3.6
cursor.execute(query)  # Interaction with the database occurs only once
db.commit()

这将生成以下语句:

INSERT INTO birthdays (name,birthday) VALUES ('David', '2014-05-22'),('Larry', '2014-05-22'),('Barry', NULL)

哪个是有效的sql语句

相关问题