如何从SQLAlchemy中的现有表中获取列名和类型?

时间:2016-08-14 09:02:48

标签: python sql sql-server-2008 orm sqlalchemy

假设我有表users,我想知道列名是什么以及每列的类型是什么。

我这样连接;

connectstring = ('mssql+pyodbc:///?odbc_connect=DRIVER%3D%7BSQL'
                     '+Server%7D%3B+server%3D.....')

engine = sqlalchemy.create_engine(connectstring).connect()
md = sqlalchemy.MetaData()
table = sqlalchemy.Table('users', md, autoload=True, autoload_with=engine)
columns = table.c

如果我打电话

for c in columns:
            print type(columns)

我得到了输出

<class 'sqlalchemy.sql.base.ImmutableColumnCollection'>

为表格中的每一列打印一次。 此外,

print columns 

打印

['users.column_name_1', 'users.column_name_2', 'users.column_name_3'....]

是否可以在不包含表名的情况下获取列名?

3 个答案:

答案 0 :(得分:8)

列包含nametype属性

for c in columns:
    print c.name, c.type

答案 1 :(得分:2)

最好使用“inspect”仅从列中获取信息,而不要反映表格。

import sqlalchemy
from sqlalchemy import inspect

engine = sqlalchemy.create_engine(<url>)
insp = inspect(engine)

columns_table = insp.get_columns(<table_name>, <schema>) #schema is optional


for c in columns_table :
    print(c['name'], c['type'])

答案 2 :(得分:-1)

您可以从信息架构中调用列名:

SELECT * 来自information_schema.columns WHERE TABLE_NAME ='用户'

然后将结果排序为数组,并循环遍历它们。