我正在尝试动态调用一个具有更改号的字段名。示例我将Hard4,Hard6,Hard8,Hard10作为字段,并希望基于滚动调用它们。我目前得到一个语法错误,我无法找到通过搜索stackoverflow修复:(。
任何帮助都将不胜感激! 代码:
conn = sqlite3.connect('C:\sqlite\crapsdatabase.db')
c = conn.cursor()
die1 = 3
die2 = 3
theroll = die1+die2
if die1 == die2:
c.execute("SELECT playerName FROM player WHERE Hard? > 1", (theroll,))
for row in c:
for field in row:
print(field)
错误:
c.execute("SELECT playerName FROM player WHERE Hard? > 1", (theroll,))
sqlite3.OperationalError: near "?": syntax error
这是使用python 3,如果这会产生重大影响。我也尝试过把?用单引号...
再次感谢您的期待!
答案 0 :(得分:1)
在这种情况下,使用%
种类或.format()
类型的字符串格式是合适的。
c.execute("SELECT playerName FROM player WHERE Hard%d > 1" % theroll)
请注意,绝不应使用字符串格式从用户输入构建SQL语句。处理用户输入时,请始终使用?
- 样式参数替换。
答案 1 :(得分:0)
?
运算符不会简单地在您的SQL代码中输入文本。内部Sqlite还会进行一些处理。正如您所说,如果使用完整的纯文本SQL查询,会在文本周围放置问号,转义字符,sqlite也会在使用?
运算符时处理此问题。
您只需使用字符串格式:
c.execute("SELECT playerName FROM player WHERE %s > 1" % ("Hard%s" % the roll,))