1 step: Create a temporary table with pyodbc into sql server for objects
2 step: Select objects from temporary table and load it into pandas dataframe
3 step: print dataframe
用于创建临时表,我使用pyodbc游标,因为它使用pandas.read_sql命令解决了错误。如果我尝试将光标转换为pandas数据框,则会引发错误。甚至有用于将元组处理成数据帧的特殊行。
我的程序可以连接,创建,读取和打印,只要查询保持简单即可。 (我的实际方法有几百行sql查询语句)
import codecs
import os
import io
import pandas as pd
import pyodbc as po
server = 'sql_server'
database = 'sql_database'
connection = po.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';Trusted_Connection=yes;')
cursor = connection.cursor()
query1 = """
CREATE TABLE #ttobject (object_nr varchar(6), change_date datetime)
INSERT INTO #ttobject (object_nr)
VALUES
('112211'),
('113311'),
('114411');
"""
query2 = """
SELECT *
FROM #ttobject
Drop table if exists #ttobject
"""
cursor.execute(query1)
df = pd.read_sql_query(query2, connection)
print(df)
由于实际查询的长度,我为您省去了麻烦,而是在此处发布错误代码:
('HY000', '[HY000] [Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt (0) (SQLExecDirectW)')
此错误在query2处引发,它是具有某些联接和数据透视功能的多选择语句
当我尝试将所有内容放入一个游标时,我遇到了将其从游标转换为DataFrame的问题(尝试了几种方法,也许有人知道一个不在SO上或具有特殊标题的方法,所以我无法找到它)
如果我仅尝试使用pd.read_sql,则同样的问题,则临时表的创建不起作用
我不知道从这里继续前进。
请让我知道我是否可以为您提供进一步的详细信息,根据我的失落情况,我可能会对其进行过多监视:S
23.5.19进一步调查:
第二次,我尝试添加
“ cursor.execute('SET NOCOUNT ON; EXEC schema.proc @muted = 1')
目前,我猜第一个查询需要更长的时间,因此python已经从第二个查询开始,因此连接是 受阻。或者第一个查询正在重现一些反馈,所以python 认为它在实际完成之前就完成了。