pyodbc insert into sql



我使用MS SQL express数据库。我可以连接并获取数据。但插入数据不起作用:

cursor.execute("insert into [mydb].[dbo].[ConvertToolLog] ([Message]) values('test')")

我没有收到任何错误,但表中没有插入任何内容。在我获取数据之后,插入的行将被直接获取。但什么都救不了。

在MS SQL Server Management Studio中,插入确实有效。

您需要提交数据。每个SQL命令都在一个事务中,必须提交该事务才能将该事务写入SQL Server,以便其他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。

这里也是同样的问题,对上面的答案稍作修改。我为此挣扎了一段时间,意识到SQL正在运行,但没有提交。我的环境是Python 3.8.2,MSSQL Server Express 15.0.2070.41(2019)。我不得不使用cursor.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()

相关内容

  • 没有找到相关文章

最新更新