Python - SQLite3中的OperationalError

时间:2014-12-24 19:41:45

标签: python sqlite

当我在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”。

我该如何解决?

1 个答案:

答案 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,了解为何必须使用?而不是连接。

最后看到这张照片并试着理解会出错的地方。 enter image description here