我使用的是 MS SQL Express 数据库,可以连接并获取数据,但无法插入数据:
cursor.execute("insert into [mydb].[dbo].[ConvertToolLog] ([Message]) values('test')")
我没有收到错误提示,但是没有数据被插入到表中。在获取数据之后直接获取插入的行,但是没有数据被保存。
在MS SQL Server Management Studio中插入操作是正常的。
我使用的是 MS SQL Express 数据库,可以连接并获取数据,但无法插入数据:
cursor.execute("insert into [mydb].[dbo].[ConvertToolLog] ([Message]) values('test')")
我没有收到错误提示,但是没有数据被插入到表中。在获取数据之后直接获取插入的行,但是没有数据被保存。
在MS SQL Server Management Studio中插入操作是正常的。
您需要提交数据。每个SQL命令都在一个事务中,必须提交该事务才能将该事务写入SQL服务器,以便其他SQL命令可以读取。
在MS SQL Server Management Studio下,默认情况下允许自动提交,这意味着每个SQL命令立即生效,您无法回滚。
示例来自pyodbc入门文档
首先打开数据库并设置游标。
import pyodbc
# Specifying the ODBC driver, server name, database, etc. directly
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass')
# Create a cursor from the connection
cursor = cnxn.cursor()
文档中的插入示例如下所示:
# Do the insert
cursor.execute("insert into products(id, name) values ('pyodbc', 'awesome library')")
#commit the transaction
cnxn.commit()
或者更好地使用参数
cursor.execute("insert into products(id, name) values (?, ?)", 'pyodbc', 'awesome library')
cnxn.commit()
正如这份文档所说的那样
请注意调用cnxn.commit()的部分。 必须调用commit,否则您的更改将会丢失! 当连接关闭时,任何未完成的更改都将被回滚。这使错误恢复非常容易,但您必须记得调用commit。
import pyodbc
# cnxn info is in a text file so I can change it in one place
def cnxn():
f=open("sql_conn.csv")
sql_split=f.read().split(",")
server=sql_split[0]
database=sql_split[1]
uid=sql_split[2]
pwd=sql_split[3]
return pyodbc.connect('DRIVER={ODBC Driver 17 for SQL
Server};SERVER=%s;DATABASE=%s;UID=%s;PWD=%s' % (server,database,uid,pwd))
# sql statement is passed by .py script
def f_sql_insert(sql):
cursor = cnxn().cursor()
cursor.execute(sql)
cursor.commit()
cnxn().close()