【问题标题】:Enter several parameters in SQL stored procedures from python with sqlalchemy使用 sqlalchemy 在 python 中的 SQL 存储过程中输入几个参数
【发布时间】:2020-04-28 05:51:08
【问题描述】:

我可以使用此脚本从我的 jupyter 笔记本成功连接到 SQL Server:

from sqlalchemy import create_engine
import pyodbc 
import csv
import time
import urllib

params = urllib.parse.quote_plus('''DRIVER={SQL Server Native Client 11.0};
                                    SERVER=SV;
                                    DATABASE=DB;
                                    TRUSTED_CONNECTION=YES;''')

engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

我可以使用以下功能从 jupyter notebook 成功执行 SQL 存储过程无参数

def execute_stored_procedure(engine, procedure_name):
    res = {}
    connection = engine.raw_connection()

    try:
        cursor = connection.cursor()
        cursor.execute("EXEC "+procedure_name)
        cursor.close()
        connection.commit()
        res['status'] = 'OK'
    except Exception as e:
        res['status'] = 'ERROR'
        res['error'] = e
    finally:
        connection.close() 
    return res

我如何才能将以前的函数转换为具有几个参数(在我的例子中是两个)的存储过程?

【问题讨论】:

    标签: python sql-server stored-procedures sqlalchemy


    【解决方案1】:

    我的问题的解决方案,仅适用于具有 0 或 2 个参数的存储过程(如果您需要其他数量的参数,只需编辑第 10 行):

    def execute_stored_procedure(engine, procedure_name,params_dict=None):
        res = {}
        connection = engine.raw_connection()
        try:
            cursor = connection.cursor()
            if params_dict is None:
                cursor.execute("EXEC "+procedure_name)
            else:
                req  = "EXEC "+procedure_name
                req += ",".join([" @"+str(k)+"='"+str(v)+"'" for k,v in params_dict.items()])               
                cursor.execute(req)
            cursor.close()
            connection.commit()
            res['status'] = 'OK'
        except Exception as e:
            res['status'] = 'ERROR'
            res['error'] = e
        finally:
            connection.close() 
        return res
    

    【讨论】:

      猜你喜欢
      • 2015-01-25
      • 2015-12-21
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      相关资源
      最近更新 更多