小编典典

在SQLAlchemy列类型和python数据类型之间轻松转换?

python

我正在寻找一种简单的python方式,将SQLAlchemy的列类型与基本类型进行比较。例如,如果我的列类型是任意长度的VARCHAR,我想将其作为字符串读取。

我可以读取列类型,但是我不确定一种简单的方法来验证其基本类型…如果可以使用“ if
isinstance(mycolumn,int)”之类的东西,那会很好-但是我是新手到python,不确定如何操作。

这是我到目前为止的内容:

from sqlalchemy import MetaData
from sqlalchemy import create_engine, Column, Table
engine = create_engine('mysql+mysqldb://user:pass@localhost:3306/mydb', pool_recycle=3600)
meta = MetaData()
meta.bind = engine
meta.reflect()
datatable = meta.tables['my_data_table']
[c.type for c in datatable.columns]

输出:

[INTEGER(display_width=11), DATE(), VARCHAR(length=127), DOUBLE(precision=None, scale=None, asdecimal=True)]

我的最终目的是双重的,首先是因为当我将输出加载到jQuery
jqGrid中时,我想根据类型来格式化输出。第二个是我正在将非规范化数据表缓慢地转换为规范化结构,并希望确保我的类型保持一致-(以确保上一个表中的数字存储为数字而不是字符串…


阅读 222

收藏
2020-12-20

共1个答案

小编典典

一种解决方案是手动进行转换-例如,这有效:

def convert(self, saType):
    type = "Unknown"
    if isinstance(saType,sqlalchemy.types.INTEGER):
        type = "Integer"
    elif isinstance(saType,sqlalchemy.types.VARCHAR):
        type = "String"
    elif isinstance(saType,sqlalchemy.types.DATE):
        type = "Date"
    elif isinstance(saType,sqlalchemy.dialects.mysql.base._FloatType):
        type = "Double"
    return type

不知道这是否是正常的python处理方式…我仍然像Java程序员一样思考。

2020-12-20