云扳手ORM
spannerorm的Python项目详细描述
谷歌云扳手orm:
扳手orm是一种简单而小的orm。学习简单,使用直观。
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
功能
- 小而简单的orm
- 支持云扳手数据库
- 巨蟒2.7-3.6
- 连接池
- 支持数据库事务
- 支持数据库迁移
目录
- 安装
- 连接
- 基本模型和数据类型
- 数据类型
- 数据类型字段参数
- 关系
- 元
- 模型装饰器
- 查询记录
- 块记录插入更新
- 保存记录(添加/更新)
- 保存(model obj,transaction)
- 全部保存(model_obj_list,transaction)
- 更新_by_pk(pk,数据,事务)
- 删除记录
- 与事务一起运行
- 模型对象函数
- 模型类函数
- 扳手b
- 数据库迁移
安装
- 安装PIP(如果未安装在系统中)
sudo apt-get install python-pip
- 安装客户端库
pip install --upgrade google-cloud-spanner
- 使用Git安装
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
- 下载服务帐户json
- 转到GCP控制台>;
服务帐户
- 从服务帐户列表中下载密钥,方法是单击
操作
>;
创建密钥
- 转到GCP控制台>;
连接
SpanRorm连接对象表示到数据库的连接。连接类被实例化为 打开与数据库的连接所需的信息,然后可以使用这些信息。
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)<表><广告>
基本模型和数据类型
基本模型类、数据类型实例、基本模型实例、关系实例都映射到数据库概念:
<表><广告>数据类型
数据类型
类用于描述模型属性到数据库列的映射。每个字段类型都有
处理相应的sql存储类(即varchar、int)和数据类型与底层存储之间的转换
透明。
数据类型字段参数
- stringfield参数
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
- integerfield参数
- floatfield参数
- 布尔字段参数
- bytesfield参数
- timestampfield参数
- 日期字段参数
- EnumField参数
- 简单示例
fromtimeimporttimefromuuidimportuuid4fromspannerormimportBaseModel,IntegerField,StringField,BoolField,TimeStampField,DateFieldclassSample(BaseModel):# Db Fields_id=StringField(db_column='id',null=False)_name=StringField(db_column='name',null=False,reg_exr='^[A-Z][ a-z]+')_modified_at=TimeStampField(db_column='modified_at',null=True,default=time())@property@StringField.getdefid(self):returnself._id@id.setter@StringField.setdefid(self,id):self._id=id@property@StringField.getdefname(self):returnself._name@name.setter@StringField.setdefname(self,name):self._name=name@property@TimeStampField.getdefmodified_at(self):returnself._modified_at@modified_at.setter@TimeStampField.setdefmodified_at(self,created):self._modified_at=createdclassMeta:db_table='sample'primary_key='id'@classmethoddefgenerate_pk(cls):returnuuid4()
关系
关系类是一种特殊的字段类型,它允许一个模型引用另一个模型。
<表><广告>- relationtype参数
简单示例:
- 用户型号
importhashlibimportrolefromtimeimporttimefromuuidimportuuid4fromspannerormimportBaseModel,StringField,BoolField,TimeStampField,ManyToOneclassUser(BaseModel):# Db column Fields_id=StringField(db_column='id',null=False)_name=StringField(db_column='name',null=False)_role_id=StringField(db_column='role_id',null=False)_created_at=TimeStampField(db_column='created_at',null=False,default=time())# Relational Fields_role=ManyToOne(join_on='role_id',relation_name='role',refer_to='id')@property@StringField.getdefid(self):returnself._id@id.setter@StringField.setdefid(self,id):self._id=id@property@StringField.getdefname(self):returnself._name@name.setter@StringField.setdefname(self,name):self._name=name@property@StringField.getdefrole_id(self):returnself._role_id@role_id.setter@StringField.setdefrole_id(self,role_id):self._role_id=role_id@property@TimeStampField.getdefcreated_at(self):returnself._created_at@created_at.setter@TimeStampField.setdefcreated_at(self,created_at):self._created_at=created_at@property@ManyToOne.getdefrole(self):returnself._role@role.setter@ManyToOne.setdefrole(self,data):self._role=dataclassMeta:db_table='users'primary_key='id'@classmethoddefrelations(cls):return{'role':role.Role}@classmethoddefgenerate_pk(cls):returnuuid4()
注意:model字段
&;关系字段名称应为[prop\u name]
窗体&;应具有带getter的属性
&;setter
元
特定于模型的配置放在一个名为meta
的特殊类中。在模型类内创建的元类。
# This Meta class placed inside mode classclassMeta:db_table='users'primary_key='id'@classmethoddefrelations(cls):return{'role':role.Role}@classmethoddefgenerate_pk(cls):returnuuid4()
- 数据库表:数据库表映射到模型
- 主键:数据库表的主键
- 关系(CLS):函数返回引用其他模型的关系。
- 生成主键(cls):生成并返回主键值的函数
模型装饰器
- 扳手装饰器
属性一起使用
setter
decorator一起使用
属性一起使用
setter
decorator一起使用
属性一起使用
setter
decorator一起使用
属性的se
装饰符setter
decorator一起使用
属性一起使用
setter
decorator一起使用
属性一起使用
setter
decorator一起使用
属性一起使用
setter
decorator一起使用
属性一起使用
setter
decorator一起使用
property
decorator一起使用
setter
decorator一起使用
property
decorator一起使用
setter
decorator一起使用
属性一起使用
setter
decorator一起使用
属性一起使用
setter
decorator一起使用
查询记录
模型查询记录公共方法
计数(标准,事务)
按条件筛选计数记录
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
0
例如:不带连接
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
1
查找(条件,事务)
按条件提取单个记录数据筛选器
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
2
例如:不带连接
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
3
例如:使用join
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
4
按主键查找(主键、条件、事务)
按主键筛选条件提取记录
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
5
<>product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
6
查找所有(条件,事务)
按条件筛选提取记录
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
7
例如:不带连接
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
8
例如:使用manytoone连接
product:
name: Google Cloud Spanner ORM
short_name: spannerorm
url: https://github.com/leapfrogtechnology/spanner-orm.git
description:
spannerdb ORM is a highly scalable, efficient Google Cloud Spanner ORM.
9
例如:使用一个omany join
sudo apt-get install python-pip0
标准
条件
对象表示查询筛选条件,例如条件、排序依据、限制/偏移量。
标准.条件(条件,操作员)
设置筛选结果集的条件条件
sudo apt-get install python-pip1
例如:其中users.email如"%@lftechnology.com"
sudo apt-get install python-pip2
例如:其中users.email like"%@lftechnology.com"或users.role\u id in('1','2')
sudo apt-get install python-pip3
例如:其中user.name如'%lf%'和(users.active=true或users.is_deleted=false)
sudo apt-get install python-pip4
例如:其中(((users.name如'%lf%')和(users.active=true或users.is_deleted=false))或(users.user_name='mjsanish'和users.password='pass'))或(users.role_id in(1,3))
sudo apt-get install python-pip5
标准。添加条件(条件,操作员)
添加筛选结果集的条件条件
sudo apt-get install python-pip6
例如:其中users.email如"%@lftechnology.com"
sudo apt-get install python-pip7
例如:其中users.email like"%@lftechnology.com"或users.role\u id in('1','2')
sudo apt-get install python-pip8
例如:其中user.name如'%lf%'和(users.active=false或users.is_deleted=true)
sudo apt-get install python-pip9
标准条件
条件提供过滤电路。
pip install --upgrade google-cloud-spanner0
条件运算符
<表><广告>运算符 说明
示例
< /广告><正文>= 等于 (用户名,"=","sanish") >; 大于 (用户点,">;",100) <; 小于 (用户点,"<;",2000年) >;= 大于或等于 (用户点,">;=",100) <;= 小于或等于 (用户点,"<;=",1000) <>; 不等于 (用户名,"<;gt;","sanish") 喜欢 搜索模式 (user.name,'like','%sa%') 在多个值中搜索 (用户角色id,'in',['1','2']) 不在 搜索不在
多个值中 (task.status,'not in',['pending','under review']) 和用和
运算符将两个条件连接起来
((user.name,'like','%sa%'),'和',(user.is_deleted,'=',false)) 或用或运算符将两个条件连接起来
((user.name,'like','%sa%'),'或',(user.is_deleted,'=',false))
>为空 (user.name,'is','null') 不是 不为空 (user.name,'is not','null') 标准.限值
不在
多个值中和
运算符将两个条件连接起来
或运算符将两个条件连接起来
((user.name,'like','%sa%'),'或',(user.is_deleted,'=',false))
设置限制标准
pip install --upgrade google-cloud-spanner1
标准。偏移量
设置偏移标准
pip install --upgrade google-cloud-spanner1
例如:其中users.name如'%lf%'限制5偏移量10
pip install --upgrade google-cloud-spanner3
标准。设置顺序(顺序道具,顺序)
按条件设置顺序
pip install --upgrade google-cloud-spanner4
例如:其中users.name如'%lf%'按users.name desc排序
pip install --upgrade google-cloud-spanner5
例如:按用户排序。name,user.email asc
pip install --upgrade google-cloud-spanner6
标准.连接(关系,连接类型,连接条件)
- 添加带条件的联接。对于连接,应在模型中定义关系
pip install --upgrade google-cloud-spanner7
例如:在roles.id=users.role\u id中左键加入用户roles.name='admin'和users.email='mjsanish+admin@gmail.com'
pip install --upgrade google-cloud-spanner8
块记录插入更新
模块功能允许快速插入/更新大量数据。
插入块(原始数据列表,事务)
插入数据块
pip install --upgrade google-cloud-spanner9 <>
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
0
更新块(CLS、原始数据列表、事务)
更新数据块
pip install --upgrade google-cloud-spanner9 <>
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
2
保存记录(添加/更新)
模型函数提供保存模型对象的功能。
保存(模型对象,事务)
向数据库添加/更新模型数据
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
3
<> git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
4
全部保存(模型对象列表,事务)
向数据库添加/更新模型列表
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
5
<> git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
6
按主键更新(主键、数据、事务)
按模型主键更新到数据库
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
7
删除记录
模型删除功能允许从数据库中删除记录
删除一个(条件,事务)
删除符合条件的单个记录
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
8
按主键删除(主键,事务)
按主键删除记录
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
9
全部删除(条件,事务)
删除所有符合条件的记录
git clone https://github.com/leapfrogtechnology/spanner-orm.git
cd spanner-orm
python setup.py install
8
使用事务运行
扳手orm提供@transactional装饰来支持事务 < < > >
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)1
模型对象函数
扳手orm提供一些基本的模型实例函数
设置道具(原始数据):
设置模型属性
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)2 <>
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)3
等于(obj)
比较两个模型对象是否等于
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)4
是新记录吗?
检查是新的记录模型实例还是现有的记录模型实例
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)5
获取pk值()
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)6
get_errors()
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)7 <>
fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)8
validate()
αααα59 <>fromspannerormimportConnectioninstance_id='develop'database_id='auth'service_account_json='/home/leapfrog/personal-data/python-work/opensource/spanner-orm/service_account.json'pool_size=10time_out=5ping_interval=300Connection.config(instance_id=instance_id,database_id=database_id,service_account_json=service_account_json,pool_size=pool_size,time_out=time_out,ping_interval=ping_interval)8
验证属性(prop)
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')1
模型类函数
扳手orm提供一些基本的模型类函数
获取元数据()
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')2
主键属性()
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')3
具有属性(属性名称)
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')4
扳手DB
SPANNRDB
类提供一些直接方法来运行本机和直接的DB操作。
执行查询(查询字符串、参数、事务)
执行查询字符串
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')5 <>
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')6
执行DDL查询(DDL查询字符串)
执行DDL查询字符串
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')7 <>
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')8
插入数据(表名、列、数据)
插入给定的表格数据
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')9
更新数据(表名、列、数据)
更新给定的表格数据
fromtimeimporttimefromuuidimportuuid4fromspannerormimportBaseModel,IntegerField,StringField,BoolField,TimeStampField,DateFieldclassSample(BaseModel):# Db Fields_id=StringField(db_column='id',null=False)_name=StringField(db_column='name',null=False,reg_exr='^[A-Z][ a-z]+')_modified_at=TimeStampField(db_column='modified_at',null=True,default=time())@property@StringField.getdefid(self):returnself._id@id.setter@StringField.setdefid(self,id):self._id=id@property@StringField.getdefname(self):returnself._name@name.setter@StringField.setdefname(self,name):self._name=name@property@TimeStampField.getdefmodified_at(self):returnself._modified_at@modified_at.setter@TimeStampField.setdefmodified_at(self,created):self._modified_at=createdclassMeta:db_table='sample'primary_key='id'@classmethoddefgenerate_pk(cls):returnuuid4()0
保存数据(表名、列、数据)
保存给定的表格数据
fromtimeimporttimefromuuidimportuuid4fromspannerormimportBaseModel,IntegerField,StringField,BoolField,TimeStampField,DateFieldclassSample(BaseModel):# Db Fields_id=StringField(db_column='id',null=False)_name=StringField(db_column='name',null=False,reg_exr='^[A-Z][ a-z]+')_modified_at=TimeStampField(db_column='modified_at',null=True,default=time())@property@StringField.getdefid(self):returnself._id@id.setter@StringField.setdefid(self,id):self._id=id@property@StringField.getdefname(self):returnself._name@name.setter@StringField.setdefname(self,name):self._name=name@property@TimeStampField.getdefmodified_at(self):returnself._modified_at@modified_at.setter@TimeStampField.setdefmodified_at(self,created):self._modified_at=createdclassMeta:db_table='sample'primary_key='id'@classmethoddefgenerate_pk(cls):returnuuid4()1
删除数据(表名,id列表):
删除给定的ID数据行
fromtimeimporttimefromuuidimportuuid4fromspannerormimportBaseModel,IntegerField,StringField,BoolField,TimeStampField,DateFieldclassSample(BaseModel):# Db Fields_id=StringField(db_column='id',null=False)_name=StringField(db_column='name',null=False,reg_exr='^[A-Z][ a-z]+')_modified_at=TimeStampField(db_column='modified_at',null=True,default=time())@property@StringField.getdefid(self):returnself._id@id.setter@StringField.setdefid(self,id):self._id=id@property@StringField.getdefname(self):returnself._name@name.setter@StringField.setdefname(self,name):self._name=name@property@TimeStampField.getdefmodified_at(self):returnself._modified_at@modified_at.setter@TimeStampField.setdefmodified_at(self,created):self._modified_at=createdclassMeta:db_table='sample'primary_key='id'@classmethoddefgenerate_pk(cls):returnuuid4()2
数据库迁移
db migration
负责运行数据库迁移的类
设置数据库迁移
- 创建migration.py文件
- 添加以下代码
fromtimeimporttimefromuuidimportuuid4fromspannerormimportBaseModel,IntegerField,StringField,BoolField,TimeStampField,DateFieldclassSample(BaseModel):# Db Fields_id=StringField(db_column='id',null=False)_name=StringField(db_column='name',null=False,reg_exr='^[A-Z][ a-z]+')_modified_at=TimeStampField(db_column='modified_at',null=True,default=time())@property@StringField.getdefid(self):returnself._id@id.setter@StringField.setdefid(self,id):self._id=id@property@StringField.getdefname(self):returnself._name@name.setter@StringField.setdefname(self,name):self._name=name@property@TimeStampField.getdefmodified_at(self):returnself._modified_at@modified_at.setter@TimeStampField.setdefmodified_at(self,created):self._modified_at=createdclassMeta:db_table='sample'primary_key='id'@classmethoddefgenerate_pk(cls):returnuuid4()3
- 配置数据库连接
fromtimeimporttimefromuuidimportuuid4fromspannerormimportBaseModel,IntegerField,StringField,BoolField,TimeStampField,DateFieldclassSample(BaseModel):# Db Fields_id=StringField(db_column='id',null=False)_name=StringField(db_column='name',null=False,reg_exr='^[A-Z][ a-z]+')_modified_at=TimeStampField(db_column='modified_at',null=True,default=time())@property@StringField.getdefid(self):returnself._id@id.setter@StringField.setdefid(self,id):self._id=id@property@StringField.getdefname(self):returnself._name@name.setter@StringField.setdefname(self,name):self._name=name@property@TimeStampField.getdefmodified_at(self):returnself._modified_at@modified_at.setter@TimeStampField.setdefmodified_at(self,created):self._modified_at=createdclassMeta:db_table='sample'primary_key='id'@classmethoddefgenerate_pk(cls):returnuuid4()4
数据库迁移命令:
可用的迁移命令:
fromtimeimporttimefromuuidimportuuid4fromspannerormimportBaseModel,IntegerField,StringField,BoolField,TimeStampField,DateFieldclassSample(BaseModel):# Db Fields_id=StringField(db_column='id',null=False)_name=StringField(db_column='name',null=False,reg_exr='^[A-Z][ a-z]+')_modified_at=TimeStampField(db_column='modified_at',null=True,default=time())@property@StringField.getdefid(self):returnself._id@id.setter@StringField.setdefid(self,id):self._id=id@property@StringField.getdefname(self):returnself._name@name.setter@StringField.setdefname(self,name):self._name=name@property@TimeStampField.getdefmodified_at(self):returnself._modified_at@modified_at.setter@TimeStampField.setdefmodified_at(self,created):self._modified_at=createdclassMeta:db_table='sample'primary_key='id'@classmethoddefgenerate_pk(cls):returnuuid4()5
例如:python migration.py创建用户表