【发布时间】:2020-06-29 22:11:01
【问题描述】:
我需要使用存储过程和使用PYODBC 的表作为参数来更新 SQL Server 数据库。存储过程应该没问题,但我不确定 Python 脚本中使用的语法:
Python:
import pandas as pd
import pyodbc
# Create dataframe
data = pd.DataFrame({
'STATENAME':[state1, state2],
'COVID_Cases':[value1, value2],
})
data
conn = pyodbc.connect('Driver={SQL Server};'
'Server=mydb;'
'Database=mydbname;'
'Username=username'
'Password=password'
'Trusted_Connection=yes;')
cursor = conn.cursor()
params = ('@StateValues', data)
cursor.execute("{CALL spUpdateCases (?,?)}", params)
存储过程:
[dbo].[spUpdateCases]
@StateValues tblTypeCOVID19 readonly,
@Identity int out
AS
BEGIN
INSERT INTO tblCOVID19
SELECT * FROM @StateValues
SET @Identity = SCOPE_IDENTITY()
END
这是我的用户定义类型:
CREATE TYPE [dbo].[tblTypeCOVID19] AS TABLE
(
[ID] [int] NOT NULL,
[StateName] [varchar](50) NULL,
[COVID_Cases] [int] NULL,
[DateEntered] [datetime] NULL
)
执行 Python 脚本时我没有收到任何错误。
【问题讨论】:
-
您为什么要使用可信连接传递用户名和密码和?这是其中之一,而不是两者。
-
@Larnu 谢谢,我会解决这个问题。只是想先让它工作,然后计划照顾它。不确定如何传递用户/通行证。
-
请添加 tblTypeCOVID19 的类型定义。
-
@DavidBrowne-Microsoft - 我已将我的用户定义类型添加到帖子中。谢谢。
-
您需要commit您的更改。这是 Python DB-API 问题的常见问题。
标签: python sql-server stored-procedures