【问题标题】:can't insert records in sqlite database by python3无法通过python3在sqlite数据库中插入记录
【发布时间】:2018-10-21 14:23:43
【问题描述】:
import sqlite3

conn = sqlite3.connect('animelist.sqlite')
cur = conn.cursor()

cur.execute('''DROP TABLE IF EXISTS Lists''')
cur.execute('''CREATE TABLE Lists (Title TEXT, Genre TEXT, Production TEXT, 
Year TEXT)''')

while True:
    a_title = input('Insert title: ')
    a_genre = input('Insert genre: ')
    a_production = input('Insert production: ')
    a_year = input('Insert year: ')

    cur.execute('''INSERT INTO Lists (Title, Genre, Production, Year) VALUES 
    (a_title, a_genre, a_production, a_year)''')

    print('Data is inserted')
    dbexit = input('EXIT (y/n): ')
    if dbexit == 'y':
        break
    elif dbexit == 'n':
        continue

我想用python、sqlite制作我的动画列表

但是当我尝试这个脚本时,

上面写着'sqlite3.OperationalError: no such column: a_title'

我错过了什么?

【问题讨论】:

  • 您需要使用占位符将变量绑定到您的语句。在 python sqlite 库文档中有很多示例 - 查找在带有大量问号的查询上调用执行的位,并将一组值也传递给函数。

标签: python-3.x sqlite


【解决方案1】:

您应该使用参数化查询。

import sqlite3

conn = sqlite3.connect('animelist.sqlite')
cur = conn.cursor()

cur.execute('''DROP TABLE IF EXISTS Lists''')
cur.execute('''CREATE TABLE Lists (Title TEXT, Genre TEXT, Production TEXT, Year TEXT)''')

a_title = 'Title'
a_genre = 'Genre'
a_production = 'Production'
a_year = 2018

cur.execute('''INSERT INTO Lists (Title, Genre, Production, Year) VALUES(?,?,?,?)''', (a_title, a_genre, a_production, a_year))
conn.commit()

在这里,我不接受用户输入。但它会将数据插入到表中。

【讨论】:

  • 我尝试了所有答案,但只有当我添加“conn.commit()”时它才有效,你能解释一下吗?我是新手
  • Connection Commit 是告诉数据库写入所有的更改。见:stackoverflow.com/questions/2847999/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多