本文主要记录,在python3 中,connect.commit()
和cursor.commit()
都是用于将事务的更改应用到数据库的方法,但它们的作用范围和用法有所不同。
connect.commit()
:这个方法是在数据库连接对象(通常是由connect()
函数返回的对象)上调用的。它将提交当前连接的所有未提交的事务更改,并将其应用到数据库上。这意味着连接对象上的所有游标都将受到影响,包括之前创建的和之后创建的游标。
举例说明:
import sqlite3
# 连接到SQLite数据库
conn = sqlite3.connect('mydatabase.db')
# 创建一个游标对象
cursor = conn.cursor()
# 执行一些SQL语句
cursor.execute("INSERT INTO Author (name, address) VALUES ('John', '123 Street')")
#或者这样写
cursor.execute("INSERT INTO Author (name, address "
"VALUES (?, ?,)", 'John', '123 Street')
# 提交更改到数据库
conn.commit()
# 关闭连接
conn.close()
在上面的例子中,conn.commit()
将提交插入操作到数据库。
cursor.commit()
:这个方法是在游标对象上调用的。它只会提交当前游标的未提交的事务更改,并将其应用到数据库上。其他在相同连接上创建的游标不会受到影响。
举例说明:
import sqlite3
# 连接到SQLite数据库
conn = sqlite3.connect('mydatabase.db')
# 创建一个游标对象
cursor = conn.cursor()
# 执行一些SQL语句
cursor.execute("INSERT INTO Author(name, address) VALUES ('John', '123 Street')")
# 提交游标的更改到数据库
cursor.commit()
# 关闭连接
conn.close()
-
在上面的例子中,
cursor.commit()
只会提交当前游标的插入操作到数据库,其他游标的更改不会被提交。
connect.commit()
提交连接对象上所有游标的更改到数据库。cursor.commit()
只提交当前游标的更改到数据库。
例如下面的demo, 只是提交 了cursor1,cursor2没提交,就会导致有问题,cursor2对应的数据未入库,这种请求就需要使用 cnxn.commit()
def inserttoDb(): connectionStr = db.createDBConnection() cnxn = pyodbc.connect(connectionStr) cursor1 = cnxn.cursor() user=('zhoujin','www.zhoujin.com',11,1) cursor1.execute("INSERT INTO Author (Author, AuthorProfileUrl,AuthorSinceYear,TipContribution) " "VALUES (?, ?, ?, ?)", user[0], user[1], user[2], user[3]) #使用事务提交到数据库 cursor1.commit() cursor1.close() cursor2 = cnxn.cursor() user=('duantiao','www.duantiao.com',11,1) cursor2.execute("INSERT INTO Author (Author, AuthorProfileUrl,AuthorSinceYear,TipContribution) " "VALUES (?, ?, ?, ?)", user[0], user[1], user[2], user[3]) #使用事务提交到数据库 cursor2.close() # cnxn.commit() db.closeDBConnection(cnxn) inserttoDb()
python3 操作多条sql批量入库操作方式
def insertMultipletoDb():
connectionStr = db.createDBConnection()
cnxn = pyodbc.connect(connectionStr)
cursor1 = cnxn.cursor()
user=('caogao','www.caogao.com',11,1)
cursor1.execute("INSERT INTO Author (Author, AuthorProfileUrl,AuthorSinceYear,TipContribution) VALUES ('caogao3', 'www.caogao3.com', '11', '2');"
"INSERT INTO Author (Author, AuthorProfileUrl,AuthorSinceYear,TipContribution) VALUES ('caogao4', 'www.caoga4.com', '11', '2');"
"INSERT INTO Author (Author, AuthorProfileUrl,AuthorSinceYear,TipContribution) VALUES ('caogao5', 'www.caogao5.com', '11', '2');"
"INSERT INTO Author (Author, AuthorProfileUrl,AuthorSinceYear,TipContribution) VALUES ('caogao6', 'www.caogao6.com', '11', '2');")
#使用事务提交到数据库
cursor1.commit()
cursor1.close()
cnxn.commit()
db.closeDBConnection(cnxn)
python 3批量实现sql更新入库操作,并且记录行号
def updateMultipletoDb():
connectionStr = db.createDBConnection()
cnxn = pyodbc.connect(connectionStr)
cursor1 = cnxn.cursor()
user=('caogao','www.caogao.com',11,1)
count=cursor1.execute("update Author set Author= CONCAT(Author,'_1') , AuthorProfileUrl= AuthorProfileUrl where Author='caogao';"
"update Author set Author= CONCAT(Author,'_2') , AuthorProfileUrl= AuthorProfileUrl where Author='caogao1';")
#使用事务提交到数据库
print(count.rowcount)
cursor1.commit()
cursor1.close()
cnxn.commit()
db.closeDBConnection(cnxn)
updateMultipletoDb()