peewee 一个轻量级的ORM (四)

时间:2022-01-07 22:24:52

class Database

    last_insert_id(cursor, model)

Parameters:
  • cursor – the database cursor used to perform the insert query
  • model
Return type:

最后一个插入的记录的那行的主键,不一定非得叫‘id'

   rows_affected ( cursor )
Return type: 受影响的行数
   create_table ( model_class [, safe=False ] )
Parameters:
  • model_class –要创建的表所代表的Model
  • safe – 如果设置为True,会自动检查该表是否存在,存则不创建了
   create_index ( model_class, field_names [, unique=False ] )
Parameters:
  • model_classModel
  • field_name –要创建的索引的字段名,可以是字符串或list
  • unique –是否将索引设置为唯一
   create_foreign_key ( model_class, field )
Parameters:
  • model_class –哪个表要设置外键约束
  • field
   drop_table ( model_class [, fail_silently=False ] )
Parameters:
  • model_classModel
  • fail_silently –设置为真,则会检查是否存在该表,是则删

Note

目前这个版本(1.0)还没有能实现级连删表。

   add_column_sql ( model_class, field_name )
Parameters:
  • model_classModel 
  • field_name (string) –  想要添加的字段
Return type:

SQL suitable for adding the column

Note

如果添加一个不允许为空的字段将引起异常IntegrityError.

   rename_column_sql ( model_class, field_name, new_name )
Parameters:
  • model_classModel instance
  • field_name (string) – 现字段名
  • new_name (string) – 新字段名
Return type:

SQL suitable for renaming the column

Note

现字段名必须是存在

Note

SQLite 目前暂时不支持

   drop_column_sql ( model_class, field_name )
Parameters:
  • model_classModel instance
  • field_name (string) –

Note

SQLite 暂时不支持

   create_sequence ( sequence_name )
Parameters: sequence_name – name of sequence to create

如果你的数据库引擎支持 sequences才可以用

   drop_sequence ( sequence_name )
Parameters: sequence_name – name of sequence to drop
同上,你的数据库必须支持sequences
   get_indexes_for_table ( table )
Parameters: table – the name of table to introspect
Return type: a list of (index_name,is_unique) tuples
在Database的子类中实现
   get_tables ( )
Return type: a list of table names in the database
在Database子类中实现。
   sequence_exists ( sequence_name )
Rtype boolean:  

目前,实现了的Database子类有三个;SqliteDatabaseMySQLDatabasePostgresqlDatabase

class SqliteDatabase ( Database )

 “sqlite3”模块驱动

class MySQLDatabase ( Database )

“MySQLdb” 模块驱动

class PostgresqlDatabase ( Database )

“psycopg2” 模块驱动

后面还有一些工具。比如pwiz

如果我们的项目中有一些数据表是已经创建了的,那我们怎么使用呢。

pwiz这个脚本能够帮我们分析已经数据库中的表信息,并构造出class,使用pwiz时的一些参数。

Option Meaning Example
-h show help  
-e database backend -e mysql
-H host to connect to -H remote.db.server
-p port to connect on -p 9001
-u database user -u postgres
-P database password -P secret
-s postgres schema -s public

gauss@gauss:/usr/local/lib/python2.7/dist-packages$ python pwiz.py -u 'root' -P 'gauss' -e mysql test >my_models.py
利用pwiz分析我的test数据库,然后自动生成了下面这个文件,在我们要使用到这些表的时候引入即可。
from peewee import *

database = MySQLDatabase('test', **{'passwd': 'gauss', 'user': 'root'})

class UnknownFieldType(object):
pass

class BaseModel(Model):
class Meta:
database = database

class Job(BaseModel):
name = CharField()

class Meta:
db_table = 'job'