Dask/Python:将read\u sql\u表中索引列的字符转换为int

Dask/Python:将read\u sql\u表中索引列的字符转换为int,python,python-3.x,sqlalchemy,dask,Python,Python 3.x,Sqlalchemy,Dask,我很难理解Dask read_sql_table方法。我很好地连接到数据库,但是我希望用作索引列的列是一个仅包含整数的char类型 我试过: from urllib.parse import quote_plus server = 'SERVER_NAME' db = 'DB_NAME' table = 'TABLE_NAME' connection_string = 'DRIVER={SQL Server};SERVER=' + server + ';DATABASE=' + db + ';T

我很难理解Dask read_sql_table方法。我很好地连接到数据库,但是我希望用作索引列的列是一个仅包含整数的char类型

我试过:

from urllib.parse import quote_plus
server = 'SERVER_NAME'
db = 'DB_NAME'
table = 'TABLE_NAME'
connection_string = 'DRIVER={SQL Server};SERVER=' + server + ';DATABASE=' + db + ';Trusted_Connection=yes'
connection_string = quote_plus(connection_string)
connection_string = 'mssql+pyodbc:///?odbc_connect='+connection_string
df = dd.read_sql_table(table,connection_string,'sql.cast(sql.column("ID"),int).label("ID")')
服务器、数据库、表和列名在这里都被替换为虚拟名称,因为它是公司数据库

我得到的错误是:

KeyError                                  Traceback (most recent call last)
<ipython-input-25-8e261dcd8696> in <module>()
  6 connection_string = quote_plus(connection_string)
  7 connection_string = 'mssql+pyodbc:///?odbc_connect='+connection_string
----> 8 df = dd.read_sql_table(table,connection_string,'sql.cast(sql.column("ID"),int).label("ID")')

~\AppData\Local\Continuum\Anaconda3\lib\site-packages\dask\dataframe\io\sql.py in read_sql_table(table, uri, index_col, divisions, npartitions, limits, columns, bytes_per_chunk, **kwargs)
 73                          schema=schema)
 74 
---> 75     index = (table.columns[index_col] if isinstance(index_col, six.string_types)
 76              else index_col)
 77     if not isinstance(index_col, six.string_types + (elements.Label,)):

~\AppData\Local\Continuum\Anaconda3\lib\site-packages\sqlalchemy\util\_collections.py in __getitem__(self, key)
192 
193     def __getitem__(self, key):
--> 194         return self._data[key]
195 
196     def __delitem__(self, key):

KeyError: 'sql.cast(sql.column("ID"),int).label("ID")'

有人知道怎么修吗?

好的。。。所需要的只是更多的胡闹。错误是我试图将SQLalchemy表达式作为字符串传递。我应该加载SQLalchemy模块并将其作为正确的表达式编写:

from urllib.parse import quote_plus
from sqlalchemy import sql, types
server = 'SERVER_NAME'
db = 'DB_NAME'
table = 'TABLE_NAME'
connection_string = 'DRIVER={SQL Server};SERVER=' + server + ';DATABASE=' + db + ';Trusted_Connection=yes'
connection_string = quote_plus(connection_string)
connection_string = 'mssql+pyodbc:///?odbc_connect='+connection_string
df = dd.read_sql_table(table,connection_string,sql.cast(sql.column("ID"),types.BigInteger).label("ID"))

好的。。。所需要的只是更多的胡闹。错误是我试图将SQLalchemy表达式作为字符串传递。我应该加载SQLalchemy模块并将其作为正确的表达式编写:

from urllib.parse import quote_plus
from sqlalchemy import sql, types
server = 'SERVER_NAME'
db = 'DB_NAME'
table = 'TABLE_NAME'
connection_string = 'DRIVER={SQL Server};SERVER=' + server + ';DATABASE=' + db + ';Trusted_Connection=yes'
connection_string = quote_plus(connection_string)
connection_string = 'mssql+pyodbc:///?odbc_connect='+connection_string
df = dd.read_sql_table(table,connection_string,sql.cast(sql.column("ID"),types.BigInteger).label("ID"))

当然,对文件的改进表示赞赏。正如函数名所暗示的那样,只需加载一个没有表达式的表就可以了,这是最主要的用法!我只是被DB诅咒了,我无法控制自己。当我们开始在机器学习工作流程中使用dask时,我很乐意为文档提供示例。对文档的改进当然非常感谢。正如函数名所暗示的那样,只需加载一个没有表达式的表就可以了,这是最主要的用法!我只是被DB诅咒了,我无法控制自己。当我们开始在机器学习工作流中使用dask时,我很乐意为文档提供示例