【发布时间】:2020-04-06 23:12:43
【问题描述】:
我可以使用此脚本从我的 jupyter 笔记本成功连接到 SQL Server Management Studio:
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)
我设法执行了一些这样的 SQL 脚本:
engine.execute("delete from table_name_X")
但是,我无法执行存储过程。我从stored procedures with sqlAlchemy 中看到的内容尝试了以下脚本。以下脚本的输出类似于“sqlalchemy.engine.result.ResultProxy at 0x173ed18e470”,但实际上并未执行该过程(什么也没发生):
# test 1
engine.execute('stored_procedure_name')
# test 2
from sqlalchemy import func
from sqlalchemy.orm import sessionmaker
session = sessionmaker(bind=engine)()
session.execute(func.upper('stored_procedure_name'))
您能告诉我执行存储过程的正确方法吗?
【问题讨论】:
-
您链接的主题有很多对您有用的信息。具体来说,
func是有限的。还有其他你应该阅读的 cmets。您怎么知道存储过程“已执行但实际上什么也没发生”?老实说,这是不可能的。存储过程未在服务器上执行,或者已执行。你试过简单地做session.execute('your_stored_proc')吗?您是否包括架构?你的 proc 需要参数吗? -
检查此信息...在调用存储过程部分-> docs.sqlalchemy.org/en/13/core/connections.html
-
确实,我阅读并尝试调整所有 cmets。我说存储过程已执行,但没有发生任何事情,因为 python 输出看起来正在工作,而当我检查我的 sql 表时,我发现该过程没有工作
-
在您的示例中,您使用 delete ....如果您尝试使用 select....work?
-
为了明确定义,SQL Server Management Studio (SSMS) 是 SQL Server 数据库的客户端用户界面。因此,您永远不会连接到它。您正在连接到 SQL Server(即 SQL Server 数据库引擎)。
标签: python sql sql-server stored-procedures sqlalchemy