【问题标题】:Sqlite insert query not working with python?Sqlite插入查询不适用于python?
【发布时间】:2014-04-24 16:31:39
【问题描述】:

我一直在尝试使用 python 中的以下代码将数据插入数据库:

import sqlite3 as db
conn = db.connect('insertlinks.db')
cursor = conn.cursor()
db.autocommit(True)
a="asd"
b="adasd"
cursor.execute("Insert into links (link,id) values (?,?)",(a,b))
conn.close()

代码运行没有任何错误。但是不会更新数据库。我尝试添加conn.commit(),但它给出了一个错误,提示找不到模块。请帮忙?

【问题讨论】:

  • 我不确定:是否可能需要在获取光标之前设置自动提交?
  • 也试过了。得到相同的错误“模块”对象没有属性“自动提交”
  • AttributeError: 'module' object has no attribute 'autocommit'sqlite3 模块上没有这样的方法,设置 autocommit 会完全不同。
  • @MartijnPieters 不能使用自动提交怎么办?

标签: python sqlite


【解决方案1】:

你必须在插入后提交:

cursor.execute("Insert into links (link,id) values (?,?)",(a,b))
conn.commit()

或使用connection as a context manager

with conn:
    cursor.execute("Insert into links (link,id) values (?,?)", (a, b))

或通过将isolation_level关键字参数设置为connect()方法来正确设置自动提交为None

conn = db.connect('insertlinks.db', isolation_level=None)

Controlling Transactions

【讨论】:

【解决方案2】:

可能有点晚,但设置autocommit = true 节省我的时间!特别是如果您有一个脚本来运行一些批量操作,例如update/insert/delete...

参考:https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.isolation_level

这是我通常在脚本中使用的方式:

def get_connection():
    conn = sqlite3.connect('../db.sqlite3', isolation_level=None)
    cursor = conn.cursor()
    return conn, cursor

def get_jobs():
    conn, cursor = get_connection()

    if conn is None:
        raise DatabaseError("Could not get connection")

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2018-05-28
    相关资源
    最近更新 更多