pyDAL一个python的ORM(3)建表&与表相关操作

1、建表操作define_table()

我们构建2张表,后面示例使用:

db.define_table('person',#表名

Field('id', 'string'),#字段名及字段的数据类型

   Field(‘name', 'string'),

   Field(‘dept', 'string'), )

db.define_table('things',

Field('id', 'string'),

Field(‘name', 'string'),

   Field(‘owner', 'string'), )

2、删除表操作drop()

db.person.drop(),删除整张

3、表操作注意事项

     如果单独用pyDAL对表级别的操作(建表、删表、增删改表字段)可以数据库客户端或者其他工具,但是在变动后需要在python代码中同步进行db.define_table的匹配定义变更,同时db对象初始化是的migrate_enabledTrue

migrate_enabledTrue有以下自动特性:

1define_table checks whether or not the corresponding table exists. If it does not, it generates the SQL to create it and executes the SQL.

检查define_table()的字段是否已存在,不存在的执行SQL扩展字段,如果用数据库客户端或者其他工具扩展字段,但是没有用define_table()同步引入相关字段,那这个字段在pyDAL中是无法使用的

2If the table does exist but differs from the one being defined, it generates the SQL to alter the table and executes it.

3If a field has changed type but not name, it will try to convert the data type

如果表和字段已存在,就检查表的字段,以及字段的数据类型在数据库中和define_table()是否一致,如果不一致,则自动执行SQL更改字段数据类型。

4、pyDAL表的数据类型

field type

default field validators

string

IS_LENGTH(length) default length is 512

text

IS_LENGTH(length) default length is 32768

blob

None default length is 2**31 (2 GiB)

boolean

None

integer

IS_INT_IN_RANGE(-2**31, 2**31)

double

IS_FLOAT_IN_RANGE(-1e100, 1e100)

decimal(n,m)

IS_DECIMAL_IN_RANGE(-10**10, 10**10)

date

IS_DATE()

time

IS_TIME()

datetime

IS_DATETIME()

password

IS_LENGTH(length) default length is 512

upload

None default length is 512

reference

IS_IN_DB(db, table.field, format)

list:string

None

list:integer

None

list:reference

IS_IN_DB(db, table._id, format, multiple=True)

json

IS_EMPTY_OR(IS_JSON()) default length is 512

bigint

IS_INT_IN_RANGE(-2**63, 2**63)

big-id

None

big-reference

None

(1)pyDAL是个适配多种数据库的ORM,使用其他工具进行建表时,要注意pyDAL原生数据库的数据类型的对应关系,这是使用任何ORM都要注意的问题

(2)字段长度(varchar/string最好能限定长度, MySQL要求一个行的定义长度不能超过65535字节

你可能感兴趣的:(python基础,web2py,数据库,python,web2py)