使用Python,如何从SQL查询中返回多个表?

时间:2015-08-21 15:37:48

标签: python sql pyodbc multiple-return-values

我正在尝试使用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返回多个表格,我该怎么办,例如两张桌子?

非常感谢。

2 个答案:

答案 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)