def quantity():
i = 0
x = 1
file = open("john.txt", "r")
while i < 5000:
for line in file:
c.execute("INSERT INTO test (playerNAME, playerID) VALUES ("+line+", "+str(x)+")")
conn.commit()
x = random.randint(100,10000000000000000)
i += 1
我尝试遍历John.txt文件并将每个值插入表中。 txt文件中的第一个单词是&#34; abc123&#34;。当我运行此代码时出现错误:sqlite3.OperationalError:no such column:abc123
我可以获取代码将随机数输入到playerID中,但我无法让txt文件查询工作......
答案 0 :(得分:1)
你需要在字符串周围加上单引号。
c.execute("INSERT INTO test (playerNAME, playerID) VALUES ('"+line+"', "+str(x)+")")
否则它会尝试将其解释为sql表达式并查找命名列。
更一般地说,您应该使用参数或清理文件中的传入数据,以防止sql插入。即使您信任这个特定的文件。这是一个好习惯。
c.execute("INSERT INTO test (playerName, playerID) VALUES (?, ?)", (line, x))
Details are here和here是其重要的原因。
答案 1 :(得分:1)
通过字符串连接格式化SQL查询是非常不良做法。 应始终使用变量绑定:
c.execute("INSERT INTO test (playerNAME, playerID) VALUES (?, ?)", [line, x])
在您的情况下,该行可能包含空格或任何标点符号。 但是,sqlite的错误字符串会产生误导。