云扳手ORM

spannerorm的Python项目详细描述


谷歌云扳手orm:

扳手orm是一种简单而小的orm。学习简单,使用直观。

pypi " rel="nofollow">version

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
  • 连接池
  • 支持数据库事务
  • 支持数据库迁移

目录

安装

  • 安装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控制台>;服务帐户
    • 从服务帐户列表中下载密钥,方法是单击操作>;创建密钥

连接

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)
<表><广告>参数 数据类型 必需/可选 说明 < /广告><正文>实例ID字符串必需的云扳手实例ID数据库ID字符串必需的云扳手数据库服务帐户json字符串必需的服务帐户json的文件完整路径泳池大小整数可选数据库池连接的最大数目超时整数可选以秒为单位,等待返回的会话ping_间隔整数可选ping会话的间隔

基本模型和数据类型

基本模型类、数据类型实例、基本模型实例、关系实例都映射到数据库概念:

<表><广告>类/实例 对应于…< /广告><正文>基本模型数据库表数据类型实例表上的列基本模型实例< TD > RO数据库表中的w关系实例数据库关系

数据类型

数据类型类用于描述模型属性到数据库列的映射。每个字段类型都有 处理相应的sql存储类(即varchar、int)和数据类型与底层存储之间的转换 透明。

<表><广告>数据类型 对应的扳手数据类型 < /广告><正文>字符串字段字符串整数域Int64浮动字段浮点64布尔菲尔德布尔字节字段字节时间戳字段时间戳日期字段日期枚举字段字符串

数据类型字段参数

  • stringfield参数
<表><广告>参数 需要/可选 键入说明 < /广告><正文>分贝列必需的 STR 相应的数据库列空错误布尔为允许空值,默认为真默认值错误 STR 默认值最大长度错误 INT/TDT>最大允许字符串长度登记出口错误 STR 正则表达式<>
fromspannerormimportStringField_email=StringField(db_column='email',null=False,reg_exr='^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
  • integerfield参数
<表><广告>参数 需要/可选 键入说明 < /广告><正文>分贝列必需的 STR 相应的数据库列空可选布尔为允许空值,默认为真默认值可选 INT/TDT>默认值最小值可选 INT/TDT>最大允许值最大值可选 INT/TDT>最小允许值
  • floatfield参数
<表><广告>参数 需要/可选 键入说明 < /广告><正文>分贝列必需的 STR 相应的数据库列空可选布尔为允许空值,默认为真默认值可选浮动默认值最小值可选浮动最大允许字符串长度最大值可选浮动正则表达式小数位数可选 INT/TDT>正则表达式
  • 布尔字段参数
<表><广告>参数 需要/可选 键入说明 < /广告><正文>分贝列必需的 STR 相应的数据库列空可选布尔为允许空值,默认为真默认值可选布尔默认值
  • bytesfield参数
<表><广告>参数 需要/可选 键入说明 < /广告><正文>分贝列必需的 STR 相应的数据库列空可选布尔为允许空值,默认为真默认值可选 STR 默认值
  • timestampfield参数
<表><广告>参数 需要/可选 键入< >说明< /广告><正文>分贝列必需的 STR 相应的数据库列空可选布尔为允许空值,默认为真默认值可选浮动默认值
  • 日期字段参数
<表><广告>参数 需要/可选 键入说明 < /广告><正文>分贝列必需的 STR 相应的数据库列空可选布尔为允许空值,默认为真默认值可选日期时间.日期默认值
  • EnumField参数
<表><广告>参数 需要/可选 键入说明 < /广告><正文>分贝列必需的 STR 相应的数据库列空可选布尔为允许空值,默认为真默认值可选 STR 默认值枚举列表要求列表枚举值
  • 简单示例
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参数
<表><广告>参数 需要/可选 键入说明 < /广告><正文>在上加入必需的 STR 相应的数据库列关系名称必需的布尔为允许空值,默认为真请参阅必需的 STR 默认值
  • 简单示例:

    • 用户型号
    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):生成并返回主键值的函数

模型装饰器

  • 扳手装饰器
<表><广告>装饰工 说明 < /广告><正文>@stringfield.getstringfield getter,应该与属性一起使用 @stringfield.setstringfield setter,应该与setterdecorator一起使用 @integerfield.getintegerfield getter,应该与属性一起使用 @integerfield.setintegerfield setter,应该与setterdecorator一起使用 @floatfield.getfloatfield getter,应该与属性一起使用 @floatfield.setfloatfield setter,应该与setterdecorator一起使用 @布尔菲尔德。获取野性杀手,你应该使用属性的se装饰符@boolfield.setboolfield setter,应该与setterdecorator一起使用 @bytesfield.getbytesfield getter,应该与属性一起使用 @bytesfield.setbytesfield setter,应该与setterdecorator一起使用 @timestampfield.gettimestampfield getter,应该与属性一起使用 @timestampfield.settimestampfield setter,应该与setterdecorator一起使用 @datefield.getDateField getter,应该与属性一起使用 @datefield.setdatefield setter,应该与setterdecorator一起使用 @enumfield.getEnumField getter,应与属性一起使用 @enumField.set枚举字段设置器,应与setterdecorator一起使用 @一个图标。获取onetoone relation getter,应该与propertydecorator一起使用 @一个阀组onetoone relationship setter,应该与setterdecorator一起使用 @一个女人。获取一个omany relation getter,应该与propertydecorator一起使用 @一个家庭设置一个家庭关系设置器,应该与setterdecorator一起使用 @多人一组。获取manytone关系getter,应该与属性一起使用 @多人一组多个关系设置器,应与setterdecorator一起使用 @多人。获取多个关系getter,应该与属性一起使用 @manytomany.set多个关系设置器,应与setterdecorator一起使用

查询记录

模型查询记录公共方法

计数(标准,事务)

按条件筛选计数记录

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-pip
0

标准

条件对象表示查询筛选条件,例如条件、排序依据、限制/偏移量。

标准.条件(条件,操作员)

设置筛选结果集的条件条件

sudo apt-get install python-pip
1

例如:其中users.email如"%@lftechnology.com"

sudo apt-get install python-pip
2

例如:其中users.email like"%@lftechnology.com"或users.role\u id in('1','2')

sudo apt-get install python-pip
3

例如:其中user.name如'%lf%'和(users.active=true或users.is_deleted=false)

sudo apt-get install python-pip
4

例如:其中(((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-pip
5
标准。添加条件(条件,操作员)

添加筛选结果集的条件条件

sudo apt-get install python-pip
6

例如:其中users.email如"%@lftechnology.com"

sudo apt-get install python-pip
7

例如:其中users.email like"%@lftechnology.com"或users.role\u id in('1','2')

sudo apt-get install python-pip
8

例如:其中user.name如'%lf%'和(users.active=false或users.is_deleted=true)

sudo apt-get install python-pip
9
标准条件

条件提供过滤电路。

    pip install --upgrade google-cloud-spanner
0
条件运算符 <表><广告>运算符说明 示例 < /广告><正文>=等于(用户名,"=","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')
标准.限值

设置限制标准

    pip install --upgrade google-cloud-spanner
1
标准。偏移量

设置偏移标准

    pip install --upgrade google-cloud-spanner
1

例如:其中users.name如'%lf%'限制5偏移量10

    pip install --upgrade google-cloud-spanner
3
标准。设置顺序(顺序道具,顺序)

按条件设置顺序

    pip install --upgrade google-cloud-spanner
4

例如:其中users.name如'%lf%'按users.name desc排序

    pip install --upgrade google-cloud-spanner
5

例如:按用户排序。name,user.email asc

    pip install --upgrade google-cloud-spanner
6
标准.连接(关系,连接类型,连接条件)
  • 添加带条件的联接。对于连接,应在模型中定义关系
    pip install --upgrade google-cloud-spanner
7

例如:在roles.id=users.role\u id中左键加入用户roles.name='admin'和users.email='mjsanish+admin@gmail.com'

    pip install --upgrade google-cloud-spanner
8

块记录插入更新

模块功能允许快速插入/更新大量数据。

插入块(原始数据列表,事务)

插入数据块

    pip install --upgrade google-cloud-spanner
9 <>
    git clone https://github.com/leapfrogtechnology/spanner-orm.git
    cd spanner-orm
    python setup.py install
0

更新块(CLS、原始数据列表、事务)

更新数据块

    pip install --upgrade google-cloud-spanner
9 <>
    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创建用户表

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
爪哇领导人选举   java查询MongoDB数组并使用最匹配的元素进行排序   java使用Maven在Tomcat上生成和访问WSDL   java从给定列表中做出不同的选择   java读取netflow/rflow(ddwrt)数据包内容   jaxb反序列化XML以在Java中动态创建类   通过Java执行的Curl命令在windows中有效,而不是在linux中   java同步方法是否阻止更新对象字段?   带有自定义适配器崩溃应用程序的java Android ListView   java字符串到字符串数组的转换   使用redis缓存java对象:为什么它比ConcurrentHashMap更好?   java再次加载jni库时会发生什么?   java ClassNotFoundException在JustSerialized类的反序列化期间发生