如何在python中调用带有这么多参数的SQL服务器存储过程?
How to call SQL Server stored procedure with so many parameters in python?
我必须在超过 50 列的数据库 table 中插入记录。我知道如何使用 Python 中的参数调用存储过程,如下所示:
self.__createConnection()
proc= "{call faftech..Hns_HolidayCheck (?)}"
ls=[]
ls.append(dateTime)
param= ls
self.__cursor.execute(proc, param)
val= self.__cursor.fetchone()
self.__closeConnection()
我想知道在具有这么多列的 table 中插入数据的最佳方法。我正在使用 pypyOdbc。
遗憾的是,没有简单的方法可以做到这一点。最好的方法是提供table_name
、column_names
和values
,然后自己构建sql:
def insert_row(self, table_name, column_names, values):
params = [ '?' ] * len(values)
params = ','.join(params)
column_names = [ f'[{x}]' for x in column_names ]
column_names = ','.join(column_names)
sql = f'insert into [{table_name}] ({column_names}) values ({params})'
conn = self.getConnection()
with conn.cursor() as cursor:
conn.execute(sql, values)
或者,您可以发送 column_name
s => value
s:
的字典
def insert_row(self, table_name, values):
params = [ '?' ] * len(values)
params = ','.join(params)
q, column_names = [], []
for column_name, value in values.items():
q.append(value)
column_names.append(f'[{column_name}]')
column_names = ','.join(column_names)
sql = f'insert into [{table_name}] ({column_names}) values ({params})'
conn = self.getConnection()
with conn.cursor() as cursor:
conn.execute(sql, q)
或者,您可以使用 django,这将使它更易于管理。
由于列数超过 10,因此最好在 SQL 中创建一个 table 类型并将 table 作为参数传递给存储过程
我必须在超过 50 列的数据库 table 中插入记录。我知道如何使用 Python 中的参数调用存储过程,如下所示:
self.__createConnection()
proc= "{call faftech..Hns_HolidayCheck (?)}"
ls=[]
ls.append(dateTime)
param= ls
self.__cursor.execute(proc, param)
val= self.__cursor.fetchone()
self.__closeConnection()
我想知道在具有这么多列的 table 中插入数据的最佳方法。我正在使用 pypyOdbc。
遗憾的是,没有简单的方法可以做到这一点。最好的方法是提供table_name
、column_names
和values
,然后自己构建sql:
def insert_row(self, table_name, column_names, values):
params = [ '?' ] * len(values)
params = ','.join(params)
column_names = [ f'[{x}]' for x in column_names ]
column_names = ','.join(column_names)
sql = f'insert into [{table_name}] ({column_names}) values ({params})'
conn = self.getConnection()
with conn.cursor() as cursor:
conn.execute(sql, values)
或者,您可以发送 column_name
s => value
s:
def insert_row(self, table_name, values):
params = [ '?' ] * len(values)
params = ','.join(params)
q, column_names = [], []
for column_name, value in values.items():
q.append(value)
column_names.append(f'[{column_name}]')
column_names = ','.join(column_names)
sql = f'insert into [{table_name}] ({column_names}) values ({params})'
conn = self.getConnection()
with conn.cursor() as cursor:
conn.execute(sql, q)
或者,您可以使用 django,这将使它更易于管理。
由于列数超过 10,因此最好在 SQL 中创建一个 table 类型并将 table 作为参数传递给存储过程