我试图将 pandas 插入到具有 chunksize 的 SQL Server 表中,但出现此错误。
错误
Traceback (most recent call last): File "C:\Users\neyma\PycharmProjects\pythonProject23\main.py", line 95, in for row in conn.fetchall(): AttributeError: 'Connection' object has no attribute 'fetchall'
这是我的代码
connection_url = URL.create(
"mssql+pyodbc",
query={"odbc_connect": connection_string}
)
engine = create_engine(connection_url)
engine = create_engine(connection_url)
conn = engine.connect().execution_options(
stream_results=True)
with open("ss.xml") as fp:
soup = BeautifulSoup(fp, 'xml')
data = []
'DSName': e.text if (e := Event.select_one(('Data[Name="DSName"]'))) else None,
'DSType': e.text if (e := Event.select_one(('Data[Name="DSType"]'))) else None,
'ObjectDN': e.text if (e := Event.select_one(('Data[Name="ObjectDN"]'))) else None,
'ObjectGUID': e.text if (e := Event.select_one(('Data[Name="ObjectGUID"]'))) else None,
'ObjectClass': e.text if (e := Event.select_one(('Data[Name="ObjectClass"]'))) else None,
'AttributeLDAPDisplayName': e.text if (e := Event.select_one(('Data[Name="AttributeLDAPDisplayName"]'))) else None,
'AttributeSyntaxOID': e.text if (e := Event.select_one(('Data[Name="AttributeSyntaxOID"]'))) else None,
'AttributeValue': e.text if (e := Event.select_one(('Data[Name="AttributeValue"]'))) else None,
'OperationType': e.text if (e := Event.select_one(('Data[Name="OperationType"]'))) else None,
})
df = pd.DataFrame(data);
engine.execute('''
CREATE TABLE try(
DSName nvarchar(max),
DSType nvarchar(max),
ObjectDN nvarchar(max),
ObjectGUID nvarchar (max),
AttributeLDAPDisplayName nvarchar(max),
AttributeSyntaxOID nvarchar(max),
AttributeValue nvarchar(max),
OperationType nvarchar(max),
)
''')
df.to_sql('try', conn, if_exists='replace', index = False,chunksize=100)
engine.execute('''
SELECT * FROM test
''')
for row in conn.fetchall():
print (row)
最佳答案
您的错误似乎在于使用fetchall()
。正如错误告诉您 conn
对象不支持 fetchall()
一样,这是事实。包含/支持此功能的是查询结果,如图 here .
将最后一个循环更改为
result = engine.execute('''
SELECT * FROM test
''')
for row in result.fetchall():
print (row)
或者您可以尝试:
for row in engine.execute('''SELECT * FROM test''').fetchall()
print(row)
编辑: 与 SQLAlchemy >2.0 版本一起使用的版本是
with engine.begin() as conn:
result = conn.exec_driver_sql("SELECT * FROM test").all()
感谢Gord Thompson要在评论中突出显示这一点,以及 SQLAlchemy 部分的更多详细信息,请参阅 here .
关于python - 尝试使用 sqlalchemy 插入 pandas 时出现错误 fetchall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73022700/