【问题标题】:Infer column type SQLAlchemy推断列类型 SQLAlchemy
【发布时间】:2016-11-07 02:59:04
【问题描述】:

假设我正在使用 SQLAlchemy 将通用 .csv 文件上传到 mssql 服务器。

如何推断每列的类型?似乎必须明确声明一列,例如 {'myvar' : Column(Integer)}。 SQLAlchemy 或其他一些库有没有办法自己推断每列的数据类型?

VB 有函数“TransferText”可以做到这一点,但我想在 python 中做到这一点。

【问题讨论】:

  • 如果你有课程YourClass那么你可以查看YourClass.your_attribute.type.python_type
  • 不幸的是,这在我的情况下不起作用。通用 .csv 文件不包含类型或类信息 - 仅包含逗号分隔的字符串。我可以读取标题以获取列的数量和名称,并创建一个默认情况下每个参数都具有 None 或 String 类型的类 - 但我无法推断字符串是否可能代表另一种数据类型。
  • 你将它上传到什么?也就是能不能从目的表中得到类型信息?
  • 我可能需要创建表;否则可以只使用现有的表参数。
  • 您必须自己编写推理算法,例如读取每一行并确定每一列是否所有单元格都只包含数字。没有万能的推理算法,因为 CSV 不是通用的。

标签: sql-server python-2.7 sqlalchemy


【解决方案1】:

根据您的数据,您可能只需使用 ast.literal_eval 即可逃脱。

import ast

assert isinstance(ast.literal_eval('1'), int)
assert isinstance(ast.literal_eval('1.0', float)
assert isinstance(ast.literal_eval('True', bool)
assert isinstance(ast.literal_eval('"foobar"', basestring)

您还可以使用更复杂的东西,例如提供type_guess 方法的messytables

http://messytables.readthedocs.io/en/latest/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2018-07-03
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多