试图在python中使用sqlite从txt文件中插入值

时间:2016-04-25 16:03:31

标签: python sql database sqlite

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文件查询工作......

2 个答案:

答案 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 herehere是其重要的原因。

答案 1 :(得分:1)

通过字符串连接格式化SQL查询是非常不良做法。 应始终使用变量绑定:

c.execute("INSERT INTO test (playerNAME, playerID) VALUES (?, ?)", [line, x])

在您的情况下,该行可能包含空格或任何标点符号。 但是,sqlite的错误字符串会产生误导。