【发布时间】:2015-05-12 11:03:20
【问题描述】:
Sqlalchemy 在为表生成 sql 时似乎不保留列顺序。如何让 sqlalchemy 使用与定义列相同的顺序?
例子:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, MetaData, Column, BigInteger, Integer, String, MetaData, ForeignKey, Date, DateTime
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class MyTable(Base):
__tablename__ = "my_table"
id = Column(BigInteger, primary_key=True)
col1 = Column(String(20), name="col1")
col2 = Column(Integer)
col3 = Column(BigInteger, name="col_3")
engine = create_engine('sqlite:///foo.db')
Session = sessionmaker(engine)
db = Session()
print(db.query(MyTable).statement.compile(engine))
输出是:
SELECT my_table.col_3, my_table.id, my_table.col1, my_table.col2
FROM my_table
而不是
SELECT my_table.id, my_table.col1, my_table.col2, my_table.col_3
FROM my_table
Sqlalchemy 似乎确实保留了表定义中的列顺序,因为当它生成 CREATE TABLE 命令时,列顺序与定义的列顺序相匹配。
from sqlalchemy.schema import CreateTable
print(CreateTable(MyTable.__table__).compile(engine))
【问题讨论】:
标签: python sqlalchemy