当我在DB中插入时,我收到此错误:
sqlite3.OperationalError: near "word": syntax error
代码:
con = sqlite3.connect('films.db')
cur = con.cursor()
cur.execute('CREATE TABLE films (id INTEGER PRIMARY KEY, name VARCHAR(100), ' +
'img BLOB, imbd VARCHAR(30), country_year VARCHAR(50))')
con.commit()
for i in range(97):
cur.execute('INSERT INTO films (name, img, imbd) VALUES(' + names[i].text_content() + ', ' + str(urllib.request.urlopen(img[i].get('src')).read()) + ', ' + imbd[i].text_content() + ' )')
con.commit()
print(cur.lastrowid)
来自“name”的字符串“word”。
我该如何解决?
答案 0 :(得分:2)
您正在做的主要错误是您没有将文字括在引号
中con = sqlite3.connect('films.db')
cur = con.cursor()
cur.execute('CREATE TABLE films (id INTEGER PRIMARY KEY, name VARCHAR(100), ' +
'img BLOB, imbd VARCHAR(30), country_year VARCHAR(50))')
con.commit()
for i in range(97):
cur.execute('INSERT INTO films (name, img, imbd) VALUES("' + names[i].text_content() + '", "' + str(urllib.request.urlopen(img[i].get('src')).read()) + '", "' + imbd[i].text_content() + '" )')
con.commit()
print(cur.lastrowid)
但如果您这样做,那么您在地球上正在做 最大错误 。而应该插入语句
cur.execute('INSERT INTO films (name, img, imbd) VALUES(?,?,?)', (names[i].text_content(), str(urllib.request.urlopen(img[i].get('src')).read()), imbd[i].text_content()))
否则,您对SQL Syringing很容易接受。请阅读this,了解为何必须使用?
而不是连接。
最后看到这张照片并试着理解会出错的地方。