sqlite动态调用字段名称

时间:2016-03-21 23:22:29

标签: python sqlite python-3.x

我正在尝试动态调用一个具有更改号的字段名。示例我将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,如果这会产生重大影响。我也尝试过把?用单引号...

再次感谢您的期待!

2 个答案:

答案 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,))