我正在尝试使用Python来调用SQL查询,pyodbc
。
它通过以下方式正常工作:
import pyodbc
import pandas.io.sql as psql
server_name = 'My_Server'
database_name = 'My_DB'
conn = pyodbc.connection("driver={SQL Server};server=" + server_name + ";database=" + database_name + ";trusted_connection=true")
sql_command = """ EXEC MY_DB.dbo.some_proc"""
df = psql.read_frame(sql_command, conn)
some_proc
只返回一个表时没关系。但是如果some_proc
返回多个表格,我该怎么办,例如两张桌子?
非常感谢。
答案 0 :(得分:1)
从Stored Procedure Multiple Tables - PYODBC - Python借来的
请确保您在存储过程中将SET NOCOUNT ON设置为ON,否则这些操作均无效。
以下内容创建数据帧列表,其中每个索引都是从存储过程返回的表。
sql = f"EXEC dbo.StoredProcedure '{param1}', '{param2}'"
cur = cnxn.cursor()
df_list = []
# get First result
rows = cur.execute(sql).fetchall()
columns = [column[0] for column in cur.description]
df_list.append(pd.DataFrame.from_records(rows, columns=columns))
# check for more results
while (cur.nextset()):
rows = cur.fetchall()
columns = [column[0] for column in cur.description]
df_list.append(pd.DataFrame.from_records(rows, columns=columns))
cur.close()
然后引用df_list[0].head()
等
答案 1 :(得分:0)
您最多可以从同一数据库返回connection.getinfo(pyodbc.SQL_MAX_DRIVER_CONNECTIONS)
个结果集。您只需要将每个SQL语句分配给不同的变量游标。
import pyodbc
connStr = (
r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};"
r"DBQ="Database.accdb;"
)
conn = pyodbc.connect(connStr)
cursor = conn.cursor()
First=cursor.execute("SELECT * FROM FirstTable Order by id")
rows = First.fetchall()
for row in rows:
print(row)
Second=cursor.execute("SELECT * FROM SecondTable")
rows = Second.fetchmany(10)
for row in rows:
print(row)