Python 3.x 请参阅SQLAlchemy生成的SQL CREATE TABLE语句,但不实际创建表
通过下面的代码片段,我可以使用SQL Alchemy轻松创建一个表,并查看实际生成的SQL“create Table”语句Python 3.x 请参阅SQLAlchemy生成的SQL CREATE TABLE语句,但不实际创建表,python-3.x,sqlalchemy,Python 3.x,Sqlalchemy,通过下面的代码片段,我可以使用SQL Alchemy轻松创建一个表,并查看实际生成的SQL“create Table”语句 from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, TIMESTAMP #engine = create_engine('sqlite:///sqlapi.db', echo = True) import testing.postgresql postgresql =
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, TIMESTAMP
#engine = create_engine('sqlite:///sqlapi.db', echo = True)
import testing.postgresql
postgresql = testing.postgresql.Postgresql()
engine = create_engine(postgresql.url(), echo=True)
meta = MetaData()
alerts = Table(
'alerts', meta,
Column('id', Integer, primary_key = True),
Column('name', String(255), nullable=False),
Column('labeler', String(255)),
Column('store', String(255)),
Column('label', String(255)),
Column('comment', String(255)),
)
meta.create_all(engine)
我的示例将结果打印如下:
2020-10-20 14:50:00,327 INFO sqlalchemy.engine.base.Engine select version()
2020-10-20 14:50:00,327 INFO sqlalchemy.engine.base.Engine {}
2020-10-20 14:50:00,329 INFO sqlalchemy.engine.base.Engine select current_schema()
2020-10-20 14:50:00,329 INFO sqlalchemy.engine.base.Engine {}
2020-10-20 14:50:00,331 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2020-10-20 14:50:00,331 INFO sqlalchemy.engine.base.Engine {}
2020-10-20 14:50:00,332 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2020-10-20 14:50:00,332 INFO sqlalchemy.engine.base.Engine {}
2020-10-20 14:50:00,333 INFO sqlalchemy.engine.base.Engine show standard_conforming_strings
2020-10-20 14:50:00,333 INFO sqlalchemy.engine.base.Engine {}
2020-10-20 14:50:00,334 INFO sqlalchemy.engine.base.Engine select relname from pg_class c join pg_namespace n on n.oid=c.relnamespace where pg_catalog.pg_table_is_visible(c.oid) and relname=%(name)s
2020-10-20 14:50:00,334 INFO sqlalchemy.engine.base.Engine {'name': 'alerts'}
2020-10-20 14:50:00,337 INFO sqlalchemy.engine.base.Engine
CREATE TABLE alerts (
id SERIAL NOT NULL,
name VARCHAR(255) NOT NULL,
labeler VARCHAR(255),
store VARCHAR(255),
label VARCHAR(255),
comment VARCHAR(255),
PRIMARY KEY (id)
)
2020-10-20 14:50:00,337 INFO sqlalchemy.engine.base.Engine {}
2020-10-20 14:50:00,343 INFO sqlalchemy.engine.base.Engine COMMIT
但是,有没有一种方法可以将CREATETABLE语句作为字符串获取,而无需在数据库中实际创建表并将其作为副作用获取?下面的代码片段正是我想要的
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, TIMESTAMP
from sqlalchemy.schema import CreateTable
import psycopg2
#engine = create_engine('sqlite:///sqlapi.db', echo = True)
import testing.postgresql
postgresql = testing.postgresql.Postgresql()
engine = create_engine(postgresql.url())
meta = MetaData()
alerts = Table(
'alerts', meta,
Column('id', Integer, primary_key = True),
Column('name', String(255), nullable=False),
Column('labeler', String(255)),
Column('store', String(255)),
Column('label', String(255)),
Column('comment', String(255)),
)
create_stmt = CreateTable(alerts).compile(engine)
print(create_stmt)