从一个sqlalchemy的连接对象和一个字符串形式的表名开始,我如何获得表属性,例如列名和数据类型.

例如,连接到sqlalchemy中的数据库

from sqlalchemy import create_engine
conn = create_engine('mssql+pyodbc://...driver=ODBC+Driver+17+for+SQL+Server').connect()

connsqlalchemy连接对象

In [1]: conn
Out[1]: <sqlalchemy.engine.base.Connection at 0x7feb6efef070>

How do I get table properties based on a table name as a string, eg 100

should起作用,但创建了一个空的DataFrame

from sqlalchemy import text
import pandas as pd
query = f"""SELECT * FROM information_schema.columns WHERE table_name='{table}'"""
df = pd.read_sql_query(text(query), conn)
In [2]: df
Out[2]:
Empty DataFrame
Columns: [TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_PRECISION_RADIX, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_CATALOG, CHARACTER_SET_SCHEMA, CHARACTER_SET_NAME, COLLATION_CATALOG, COLLATION_SCHEMA, COLLATION_NAME, DOMAIN_CATALOG, DOMAIN_SCHEMA, DOMAIN_NAME]
Index: []
versions:
sqlalchemy - 2.0.4
pandas - 1.5.3

推荐答案

你写道

conn = create_engine(...)

我更喜欢把它说成

engine = create_engine(...)

从RDBMS动态加载详细信息(使用SQLalChemy 1.4):

from pprint import pp
import sqlachemy as sa

engine = ...
meta = sa.MetaData(bind=engine)
my_table = sa.Table('my_table', meta, autoload=True)

for column in my_table.c:
    print(column)

Take a look at pp(dir(my_table)) to see lots of other details that are available.
Also help(my_table).

此外,生成的表对象是一个非常 方便的开课地点 Select 查询、插入等.


编辑

SqlAlChemy 2.0是一个突破性的变化. 百人组 解释您应该使用这个备用关键字:

meta = sa.MetaData()
my_table = sa.Table('my_table', meta, autoload_with=engine)

Python相关问答推荐

配置Sweetviz以分析对象类型列,而无需转换

我从带有langchain的mongoDB中的vector serch获得一个空数组

时间序列分解

重新匹配{ }中包含的文本,其中文本可能包含{{var}

从numpy数组和参数创建收件箱

根据二元组列表在pandas中创建新列

DataFrames与NaN的条件乘法

在vscode上使用Python虚拟环境时((env))

导入...从...混乱

如何使用SentenceTransformers创建矢量嵌入?

Pandas Data Wrangling/Dataframe Assignment

如何使用Numpy. stracards重新编写滚动和?

dask无groupby(ddf. agg([min,max])?''''

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''

mdates定位器在图表中显示不存在的时间间隔

使用python playwright从 Select 子菜单中 Select 值

如何使用Azure Function将xlsb转换为xlsx?

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

使用美汤对维基百科表格进行网络刮擦未返回任何内容