metadata
官方文档解释
The MetaData is a registry which includes the ability to emit a limited set of schema generation commands to the database. As our SQLite database does not actually have a users table present, we can use MetaData to issue CREATE TABLE statements to the database for all tables that don’t yet exist. Below, we call the MetaData.create_all() method, passing in our Engine as a source of database connectivity
metadata是一个注册器,里面包含一些数据库的模式生成命令,可以调用metadata发起create table命令来创建这个表
mapper
sqlalchemy中创建一个继承declarative_base的类的本质是,创建一个class的同时生成一个同名的Table对象,并且使用一个mapper对象将两个对象映射在一起。
1 | class MyClass(Base): |
上述代码跟下面效果是一样的1
2
3
4
5
6
7
8
9
10
11
12
13
14my_table = Table("my_table", metadata,
Column('id', Integer, primary_key=True),
Column('type', String(50)),
Column("some_alt", Integer)
)
class MyClass(object):
pass
mapper(MyClass, my_table,
polymorphic_on=my_table.c.type,
properties={
'alt':my_table.c.some_alt
})
对象状态转换
值得一提的是,当class被add到session中,但是没有commit,此时这个class并没有被写入数据库,但是此时进行query查询这个class是可以被查询出来的,因为当执行query时,执行了flush操作,调用了sql语句,这个class对应的row被生成。
1 | from sqlalchemy import Column, String, Integer, ForeignKey, create_engine |
输出