2014-03-18 43 views
5

我一直在试图将数据插入到使用下面的代码在python的数据库:Sqlite插入查询不与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(),但它给出了一个错误,说模块没有找到。请帮忙?

+1

我不确定:是否可能需要在获取游标之前设置自动提交? – Hyperboreus

+0

也尝试过。得到相同的错误'模块'对象没有'自动提交'属性' – user2923505

+1

'AttributeError:'模块'对象没有属性'autocommit''。 'sqlite3'模块上没有这种方法,设置autocommit会有很大的不同。 –

回答

24

你必须插入之后提交:

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

或使用connection as a context manager:由isolation_level关键字参数设置为connect()方法None正确

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

或设置自动提交:

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

Controlling Transactions

+0

提交是一个错误。但是,第二个代码工作正常。非常感谢。 – user2923505

+0

'__exit__'调用'commit'吗?这是DB-API规范的一部分吗? – Hyperboreus

+0

@Hyperboreus:是的,上下文管理器__exit__'方法调用'commit()'。这是一个扩展,在编写API时没有上下文管理器,请参阅[在Python数据库API中指定的连接对象是否为\ _ \ _输入\ _ \ _和\ _ \ _ exit \ _ \ _行为](http ://stackoverflow.com/a/15568275) –

1

它可能有点晚,但设置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") 

帮助你!