cursor.execute("SELECT admin FROM users WHERE username = %s'", (username, ));
cursor.execute("SELECT admin FROM users WHERE username = %(username)s", {'username': username});
def sanitizeData(value):
if value in ('', None):
return "NULL"
# This case handles the case where value already has ' in it (ex: O'Brien). This is how SQL skils single quotes
if type(value) is str:
return "'{}'".format(value.replace("'", "''"))
return value
现在这样调用SQL查询,
"INSERT INTO %s (Name, Email) VALUES (%s, %s)"%(table_name, sanitizeData(actual_name), sanitizeData(actual_email))
6条答案
按热度按时间eanckbw91#
当使用mysqldb和
cursor.execute()
时,传递值None
,而不是"NULL"
:找到答案here
3bygqnnd2#
如果col1是char,col2是int,则技巧可能是:
您不需要将“”添加到%s,它可以在将值传递到sql之前进行处理。
此方法在使用sqlalchemy的会话执行sql时有效,例如
session.execute(text(sql))
ps:sql尚未测试
oewdyzsn3#
关于在Python的SQL语句中使用参数的简单说明。请参阅RealPython关于此主题的文章-Preventing SQL Injection Attacks With Python。下面是www.example.com上的另一篇好文章-A Simple Approach To Templated SQL Queries In Python。这些文章帮助我解决了相同的None/NULL问题。TowardsDataScience.com - A Simple Approach To Templated SQL Queries In Python . These helped me with same None/NULL issue.
此外,我发现如果我将"NULL"(不带引号)直接放入VALUES中的INSERT查询中,它会在SQL Server DB中得到适当的解释。只有在需要有条件地添加NULL或通过字符串插值添加值时,才会存在转换问题。
示例:
更新:这个StackOverflow的讨论更符合我正在尝试做的事情,可能会帮助其他人。
示例:
aydmsdu94#
基于以上的回答,我为我的用例写了一个 Package 函数,你可以根据你的需要尝试改变这个函数。
现在这样调用SQL查询,
oxiaedzo5#
为什么不将变量设置为
'no price'
之类的字符串,然后在以后对数字进行数学运算时将其过滤掉呢?pes8fvy96#
快速检查是否为空,如果为空,则将其设置为NULL:
...然后确保insert语句中插入的变量没有用引号括起来,例如:
不像: