【发布时间】:2019-10-19 15:00:54
【问题描述】:
我正在为 MySQL 使用 SQLAlchemy。
SQLAlchemy 的常见例子是
- 通过表结构定义模型类。 (
class User(Base)) - 通过
db.create_all(或alembic等)迁移到数据库 - 导入模型类,并使用它。 (
db.session.query(User))
但是如果我想使用原始 SQL 文件而不是定义的模型类怎么办?
我确实读过 automap 做类似这样的事情,但我想从原始 SQL 文件中获取映射器对象,而不是创建的数据库。
有什么最佳做法可以做到这一点吗?
这是一个 DDL 示例
-- ddl.sql
-- This is just an example, so please ignore some issues related to a grammar
CREATE TABLE `card` (
`card_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'card',
`card_company_id` bigint(20) DEFAULT NULL COMMENT 'card_company_id',
PRIMARY KEY (`card_id`),
KEY `card_ix01` (`card_company_id`),
KEY `card_ix02` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='card table'
我想做的事
Base = raw_sql_base('ddl.sql') # Some kinda automap_base but from SQL file
# engine, suppose it has two tables 'user' and 'address' set up
engine = create_engine("mysql://user@localhost/program")
# reflect the tables
Base.prepare(engine)
# mapped classes are now created with names by sql file
Card = Base.classes.card
session = Session(engine)
session.add(Card(card_id=1, card_company_id=1))
session.commit() # Insert
【问题讨论】:
标签: python sqlalchemy