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

Dr.*_*erg 4 python sql orm sqlalchemy sql-server-2008

假设我有表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
Run Code Online (Sandbox Code Playgroud)

如果我打电话

for c in columns:
            print type(columns)
Run Code Online (Sandbox Code Playgroud)

我得到了输出

<class 'sqlalchemy.sql.base.ImmutableColumnCollection'>
Run Code Online (Sandbox Code Playgroud)

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

print columns 
Run Code Online (Sandbox Code Playgroud)

版画

['users.column_name_1', 'users.column_name_2', 'users.column_name_3'....]
Run Code Online (Sandbox Code Playgroud)

是否可以获取没有包含表名的列名?

Mau*_*lla 11

最好使用“检查”仅从列中获取信息,这样就不会反映表。

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'])
Run Code Online (Sandbox Code Playgroud)

  • 方法令人鼓舞,表中的反映更具可读性。除此之外,一旦有了表对象,您就可以编写查询。不确定检查是否偷懒。如果不偷懒,您可以一次性读取完整的数据库。 (2认同)

r-m*_*m-n 8

列有nametype属性

for c in columns:
    print c.name, c.type
Run Code Online (Sandbox Code Playgroud)

  • 如果我可以在这里添加,您还可以通过调用 `c.type.python_type` 来获取列的 python 类型。(另请参阅[此处](https://docs.sqlalchemy.org/en/14/core/type_basics.html#generic-types)) (11认同)