-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ 功能建议 ]sqlserver 查询存储过程 #246
Comments
你有相关方案吗?我没有在pyodbc中找到很好的调用存储过程的方法,类似 sp 之类的都没法做。 |
https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures 这是pyodbc关于存储过程的文档,但我个人看不太明白,如果你能弄明白怎么调用,我可以再帮你包装到系统中。 |
我以前倒是调过,我测试一下 |
import pyodbc
# 建立连接时候需要带上库名
sqlconstr = '''DRIVER=ODBC Driver 17 for SQL Server;SERVER={0},{1};DATABASE={2};UID={3};PWD={4};
client charset = UTF-8;connect timeout=10;CHARSET=UTF8;'''.format(Server,Port,DBName,User,Password)
fullsql = '''
sp_helptext '[Ana].[prCenterDataCntCheck]'
'''
conn = pyodbc.connect(sqlconstr)
cursor = conn.cursor()
cursor.execute(fullsql)
rows = cursor.fetchall()
print(rows)
@LeoQuote 这个测试可以获取的结果是一个list,每一行都是一个 tuple,应该需要for一下拼成一个str。 |
其实你不用懂django,我们对于mssql的调用全部都在这个文件中 https://github.com/hhyo/Archery/blob/master/sql/engines/mssql.py 我大概看了下,如果要支持存储过程、有两个点需要解决
我们的代码应该是比较清晰的,欢迎你为这个功能点做一些修改,只要单元测试全过,逻辑没有大问题就会接受 |
看了下代码
|
我觉得类似表结构这样做不太好,因为没法复用查询的流程和前端,我建议穷举一下sp_ 这样的命令,在检查的时候放过这些语句就可以。 |
测试了一下 在query_check这里直接放行了sp_helptext语句后可以正常使用。 def query_check(self, db_name=None, sql=''):
# 其他代码省略
if re.match(r"^select|^sp_helptext", sql_lower) is None:
result['bad_query'] = True
result['msg'] = '仅支持^select和^sp_helptext语法!'
return result 实际效果查询语句返回结果合并的话有啥问题么? |
就是不太好看,你觉得这种表格方式展示可以接受吗? |
放行不要这么写,要写成一堆关键词列表,然后根据列表放行,这样比较方便修改。 |
是打算这么弄,不过暂时和我们dba沟通没有需要更多的关键词,就先这样测试一下。
前端我也不太懂,暂时没啥想法,不过这个可以当作整段文本复制出来,我还能接受。。。 |
如果觉得前端可以接受可以就这么做, 那就只需要在检查里把语句放行就可以. |
目前遇到的问题/使用障碍
未来有计划开发这个功能么?我们dba提的需求。
希望如何解决/实现它
倒是想自己试着加加,但是django这块不是很熟。
The text was updated successfully, but these errors were encountered: