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

发布于 2021-01-29 17:27:44

我正在寻找一种简单的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中时,我想根据类型来格式化输出。第二个是我正在将非规范化数据表缓慢地转换为规范化结构,并希望确保我的类型保持一致-(以确保上一个表中的数字存储为数字而不是字符串…

关注者
0
被浏览
152
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    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程序员一样思考。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看