我正在使用Python 3.7和pyMySQL作为MySQL服务器的连接器。
我正在尝试执行以下查询:
query="INSERT IGNORE INTO tweets (ID, Text,create," \
"Date,local,foolowed,Count," \
"isqwdii,inR,in " \
"Sensitive,redirection)" \
"VALUES (%s,%s,%s,%s,%s,%d,%d,%d,%s,%s,%d,%d)"
vals=[kwargs['ID'], kwargs['Text'],
kwargs['create'], kwargs['Date'],
kwargs['local'], kwargs['foolowed'],
kwargs['Count'], kwargs['isascii'],
kwargs['inR'], kwargs['in'],
kwargs['Sensitive'], kwargs['redirection']]
self.__cur.execute(query,vals)
self.__conn.commit()
问题是某些%d可以为None,并且在发生这种情况时出现以下错误“ TypeError:%d格式:需要数字,而不是str”。
我无法使用该格式,因为它将使数据库中的get成为字符串。我希望数据库将其获取为None / NULL
预先感谢
答案 0 :(得分:0)
我认为您需要测试Python代码中的NULL
是否为%d
,如果是,请将%s
替换为 string 的>>> type['isascii'] = '%d'
>>> if kwargs['isascii'] is None:
>>> type['isascii'] = '%s'
>>>> query= "INSERT IGNORE INTO tweets (ID, Text,create," \
"Date,local,foolowed,Count," \
"isqwdii,inR,in " \
"Sensitive,redirection)" \
f"VALUES (%s,%s,%s,%s,%s,%d,%d,{str(type['isascii'])},%s,%s,%d,%d)"
。 / p>
(我在PHP中的经验是Null是一个字符串类型,因此我假设这会传递给Python MySQL接口)
因此,伪代码为:
{{1}}
抱歉,因为我不了解Python 3.7语法,但我希望这能为您提供概念。
Leo120的回复:
实际上,当我将所有占位符都放置为%s(并根据MySQL的需要获取所有数据)时,它就起作用了。事实证明,在pymysql中,%s代表所有人,很奇怪。谢谢您的帮助