[SQLObject官方文档] 列类型定义

上面的信息可以让你快速进入工作,下面的信息让你定义更加完整。

·Col类,定义列
列的列表是Col对象的列表。这些对象本身并没有功能,用于定义列。

dbName:
数据库的列名,如果不指定你指定的Python名称将会从大小写混用的形式转换到小写加下划线的形式。
default:
列的缺省值,在创建一个新行时使用。如果指定了一个可调用对象或函数,将会调用这个函数,并且使用其返回值。所以你可以使用DateTimeCol.now作为当前时间的缺省值。或者你可以使用sqlbuilder.func.NOW()来设置数据库使用NOW()内部函数。如果你不指定缺省值,(by gashero)则在调用这个记录的new时会抛出异常。
alternateID:
这是一个布尔型变量,缺省为False。指定列是否作为ID属性,例如用户名,尽管并不一定是主键。如果是这样,会添加一个类方法,例如byUsername将会返回这个对象,使用laternateMethodName,当你希望使用by*类似的名称时,例如alternateMethodName="username"。
这个列将会被声明为UNIQUE。
unique:
如果为True,当SQLObject创建一个表格时,将会指定这个列为UNIQUE。
notNone:
如果为True,则这个列不允许使用空值,用于创建表格。
sqlType:
这个列的SQL类型,例如INT、BOOLEAN等。你可以使用下面的类来定义,但是有时候使用sqlType更容易一些。仅在SQLObject创建表格时有效。

·列类型
ForeignKey类可以替换Col来使用,当列是其他表的外键时。一般使用方法如ForeignKey('Role'),在这个列子中创建了一个到表Role的引用。这基本等同于Col(foreignKey='Role',ssqlType='INT')。这会创建两个属性,role,会返回Role的实例;roleID会返回与之关联的role的整数ID。

Col还有一些其他子类,用于SQLObject创建表格时指示列的类型。

BLOBCol:
二进制数据列,目前只能在MySQL、PostgreSQL、SQLite中使用。
BoolCol:
创建一个BOOLEAN列在Postgre,或者INT在其他数据库中。而且会将"t"/"f"或者0/1转换到数据库后端。
CurrencyCol:
等同于DecimalCol(size=10,precision=2)。注意DecimalCol可能不会返回正确的值,这个列可能共享一些行为。注意阅读DecimalCol的注意事项。
DateTimeCol:
日期时间,一般返回datetime或mxDateTime对象。
DateCol:
一个日期对象,一般返回datetime或mxDateTime对象。
TimeCol:
一个日期对象,一般返回datetime或mxDateTime对象。
DecimalCol:
以10为基础的,正确数据,使用关键字参数size指定存储的数字位数,precision指定小数点位数。警告:偶尔会发生在DecimalCol值,尽管正确的存入数据库,(by gashero)但是可能返回浮点数而不是decimals。你可以自己测试一下,也可以试着导入Decimal类型,在你的数据库适配器导入SQLObject之前。
EnumCol:
枚举类型,包含有限个数的字符串值。给出列表中可能的字符串,依靠enumValues关键字参数。MySQL有内置的本地ENUM类型,但是在其他数据库中也可以工作,只不过效率上并不占优势。
FloatCol:
浮点数
ForeignKey:
其他表/类的外键,例如user=ForeignKey('User')
IntCol:
整数
PickleCol:
一种扩展的BLOBCol,这个列可以存储/取出任何Python对象;实际上是使用了Python的pickle来对对象串行化的压缩和解压缩的,而最终存取的是字符串。
StringCol:
一个字符串列。String(character)列。扩展关键字如下:
    length:如果给定了则字段类似于VARCHAR(length)。如果未指定则使用TEXT字段类型。
    varchar:如果包含了length,则用于区别CHAR和VARCHAR,缺省为True,使用VARCHAR。
UnicodeCol:
StringCol的子类,接受dbEncoding关键字参数,缺省为"UTF-8"。其值在存取数据库的过程中被编码和解码。在使用UnicodeCol进行查询时有些限制:
只有简单的q-magic字段支持,不允许表达式;只支持"=="和"<>"操作符。
如下为示例代码:
MyTable.select(u'value'==MyTable.q.name)
MyTable.select(MyTable.q.name<>u'value')
MyTable.select(OR(MyTable.q.col1==u'value1',MyTable.q.col2<>u'value2'))
MyTable.selectBy(name=u'value')
MyTable.selectBy(col1=u'value1',col2=u'value2')
MyTable.byCol1(u'value1') #假设col1是一个alternetID字段
如下为错误代码:
MyTable.select((MyTable.q.name+MyTable.q.surname)==u'value') #by gashero
如下情况,必须先转换编码:
MyTable.select((MyTable.q.name+MyTable.q.surname)==u'value'.encode(dbEncoding))


两个类/表之间的关系

必须使用ForeignKey来处理表的外键,后台实际使用连接(join)。

·多连接和SQL多连接:一对多
查看"One-to-Many关系"查看一对多连接的例子。
多连接(MultipleJoin)返回结果类表,而SQLMultipleJoin返回SelectResults对象。
少数关键字参数允许MultipleJoin构造器:
joinColumn:
列名
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值