简体   繁体   English

如何在python中使用这么多参数调用SQL Server存储过程?

[英]How to call SQL Server stored procedure with so many parameters in python?

I have to insert records in a db table with more than 50 columns.我必须在超过 50 列的数据库表中插入记录。 I know how to call stored procedure with parameters in Python like this:我知道如何在 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()

I want to know the best way to insert the data in the table with so many columns.我想知道在具有这么多列的表中插入数据的最佳方法。 I am using pypyOdbc.我正在使用 pypyOdbc。

There's sadly no easy way to do this.遗憾的是没有简单的方法可以做到这一点。 The best way is to provide the table_name , column_names , and values and build up the sql by yourself:最好的方法是提供table_namecolumn_namesvalues并自己构建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)

Alternatively, you can send in a dict of column_name s => value s:或者,您可以发送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)

Alternatively, you can use django which will make this much easier to manage.或者,您可以使用 django,这将使管理更容易。

由于列数超过 10,因此最好在 SQL 中创建表类型并将表作为参数传递给存储过程

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM