python - 如何在python中调用带有这么多参数的SQL Server存储过程?

标签 python sql-server python-3.x pypyodbc

我必须在超过 50 列的数据库表中插入记录。我知道如何在 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()

我想知道在具有如此多列的表中插入数据的最佳方法。我正在使用 pypyOdbc。

最佳答案

遗憾的是,没有简单的方法可以做到这一点。最好的方法是提供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)

或者,您可以发送 column_names => values 的字典:

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,这将使管理变得更容易。

关于python - 如何在python中调用带有这么多参数的SQL Server存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885800/

相关文章:

python - wx Python 小部件是否对整个窗口(全局)的鼠标点击使用react?

c# - 在 ASP.Net MVC 中使用 SaveChanges 时如何获取自动生成的 ID。我目前的方法似乎效率低下

c# - 当插入的结果什么都不显示时,如何检查值是否被插入到表中?

Python IDLE 不会显示文档字符串

python - 使用 python3.x 在 Linux 中查看分区

python - Django get_models 与模型/__init.py__

python - cx_freeze 调试控制台?

python - PySide 自定义小部件不会自动适应 QTableWidget

sql-server - 带有加密触发器的 TooManyRowsAffectedException

python - 如何将 sklearn.metrics.classification_report 的输出作为字典获取?