我创建了一个python脚本来创建一个带有一个表的sqlite3数据库。该表由2列组成:一列用于id(int),另一列用于相关句子(text)。这是代码:
#!/usr/bin/python
import sqlite3
i=0
con = sqlite3.connect("database.db")
cur = con.cursor()
cur.execute('''CREATE TABLE data(data_id int, sentence text)''')
with open("data.txt", "r") as ins:
for line in ins:
i = i + 1
cur.execute("insert into data(data_id, sentence) values ("+str(i)+",'"+line+"')")
con.commit()
con.close()
如您所见,此代码将读取文件data.txt,该文件包含每行的句子。
当我尝试执行脚本时,出现此错误:
Traceback (most recent call last):
File "scriptData.py", line 13, in <module>
cur.execute("insert into data(data_id, sentence) values ("+str(i)+",'"+line+"')")
sqlite3.OperationalError: near "che": syntax error
这是因为在我的文件data.txt中,有些行的'字符是个问题。我试图通过在我的data.txt文件中执行\来保护这个角色,但它不起作用。
问题是我需要保持'在我的句子中。我不是python程序员,所以我的知识非常有限。你有任何想法使这个脚本有效吗?
答案 0 :(得分:4)
当你将params传递给SQL查询时,你需要使用转义来防止这种情况:
cur.execute("insert into data(data_id, sentence) values (?, ?)", (i, line))
答案 1 :(得分:3)
不要将数据连接到SQL查询中。这样做很危险;恶意用户可以执行SQL注入攻击。改为使用查询参数。
cur.execute("insert into data(data_id, sentence) values (?, ?)", (i, line))
另请注意,使用executemany
代替for循环可以提高查询效率:
cur.execute("insert into data(data_id, sentence) values (?, ?)", enumerate(ins))