我正在寻找一种简单的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中时,我想根据类型来格式化输出。第二个是我正在将非规范化数据表缓慢地转换为规范化结构,并希望确保我的类型保持一致-(以确保上一个表中的数字存储为数字而不是字符串… )
一种解决方案是手动进行转换-例如,这有效:
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程序员一样思考。