我希望使用dask.read_sql获取sql数据。
我的代码是
from dask.dataframe import read_sql_query, read_sql, read_sql_table
username='uid'
password='pid'
database='myDB'
host='sql_server'
port='1433'
driver='ODBC+Driver+17+for+SQL+Server'
conn_str = f"mssql+pyodbc://{username}:{password}@{host}:{port}/{database}?driver={driver}"
ddf = read_sql_query(sql="select * from data", con=conn_str, index_col='id')但是,我发现了一个错误
File "C:\Program Files\Python38\lib\site-packages\dask\dataframe\io\sql.py", line 118, in read_sql_query
q = sql.limit(head_rows)
AttributeError: 'str' object has no attribute 'limit'如何解决这个问题?
非常感谢。
发布于 2022-08-21 14:14:00
read_sql_query()的文档指出,sql参数必须是SQLAlchemy Selectable,不能是字符串。
SQLAlchemy文档建议如下所示:
from dask.dataframe import read_sql_query
from sqlalchemy import table, column
data = table("data",
column("id"),
..., # all the other columns in your table
)
conn_str = ... # constructed as before
ddf = read_sql_query(sql=data.select(), con=conn_str, index_col='id')SQLAlchemy的快速测试
您可能想要测试SQLAlchemy是否正常工作,因此如果问题是SQLAlchemy、dask或其他什么的,您可以将其分开。这个代码片段将帮助您查看您是否正确地使用了SQLAlchemy。
import sqlalchemy
data = table("data",
column("id"),
column("foo"), # or whatever
)
conn_str = ...
engine = sqlalchemy.create_engine(conn_str)
# you don't have to use limit, but just in case your table is
# not a demo table and actually has lots of rows
cursor = engine.execute(data.select().limit(1))
row = cursor.fetchone()
print(row) # should print something like (1, 'abc')发布于 2022-08-21 13:52:24
conn_str = f"mssql+pyodbc://{username}:{password}@{host}:{port}/{database}?driver={driver}"应该是这样:
conn_str = "mssql+pyodbc://{username}:{password}@{host}:{port}/{database}?driver={driver}"https://stackoverflow.com/questions/73434983
复制相似问题