将数据库中的表自动映射ORM类
在 SQLAlchemy
中提供了将数据库中的表自动映射为ORM类的扩展(sqlalchemy.ext.automap
)。
- 基本用法
最简单用例是将一个已存在的数据库映射为新的model。
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
Base = automap_base()
# 我们假设数据库中存在两张表 `user` 和 `address`。
engine = create_engine("sqlite:///mydatabase.db")
# 将数据库中的表全部映射到 Base.classes 中
Base.prepare(engine, reflect=True)
# 映射类的默认名为数据表的名称
# 可以通过数据表名访问
User = Base.classes.user
Address = Base.classes.address
session = Session(engine)
# 对象关联关系
session.add(Address(email_address="foo@bar.com", user=User(name="foo")))
session.commit()
- 从存在的 MetaData 中生成映射
from sqlalchemy import create_engine, MetaData, Table, Column, ForeignKey
from sqlalchemy.ext.automap import automap_base
engine = create_engine("sqlite:///mydatabase.db")
# 实例化 MetaData 对象
metadata = MetaData()
# 仅映射 only 中指定的表
metadata.reflect(engine, only=['user', 'address'])
# 或者映射我们创建的Table 对象
Table('user_order', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', ForeignKey('user.id'))
)
# 传入 metadata
MetaData.Base = automap_base(metadata=metadata)
# 调用 prepare 方法 建立映射关系
Base.prepare()
# 获取映射的类
User