[SQLObject官方文档] 基础
发布时间:2020-12-12 23:40:17 所属栏目:百科 来源:网络整理
导读:使用SQLObject ·导入模块 from sqlobject import * ·定义MySQL使用的URI连接 mysqluri="mysql://user:password@host:port/database" 端口号为3306,一定要指定的。否则按照旧式连接方法里面,端口port属性设为None,就会抛出TypeError异常,因为要求必须是
使用SQLObject ·导入模块 from sqlobject import * ·定义MySQL使用的URI连接 mysqluri="mysql://user:password@host:port/database" 端口号为3306,一定要指定的。否则按照旧式连接方法里面,端口port属性设为None,就会抛出TypeError异常,因为要求必须是一个整数类型的端口号。如果按照新式的URI方式连接,如果不指定端口号则port默认为0,也会出现连接失败的问题。 sqlite的连接: sqlite:///full/path/to/database sqlite:/C|full/path/to/database sqlite:/:memory: postgre数据库的连接: postgres://user@host/database?debug=&cache= postgres://host:5432/database ·连接 conn=connectionForURI(mysqluri) sqlhub.processConnection=conn ·定义一个表格类 class Person(SQLObject): firstName=StringCol() middleInitial=StringCol(length=1,default=None) lastName=StringCol() #by gashero 如果没有定义sqlhub,则需要使用Person._connection=conn来指定连接。 ·创建表格 Person.createTable() 可以指定参数ifNotExists=True,仅仅在表格不存在时才创建这个表格。 ·自动索引 自动给出一个叫做id的索引,所以不需要人为指定。 在MySQL中定义是: INT PRIMARY KEY AUTO_INCREMENT 需要使用这个字段时,使用.id属性。 ·创建一个对象 就是创建类的实例 Person(firstName="John",lastName="Doe") 在SQLObject中的NULL/None并不是代表缺省。NULL代表完全不同的事物、正文或者是人。有时NULL也代表缺省(default),有时代表不适用,有时代表未知。如果希望缺省一个值,可以使用NULL或其他。 SQLObject的default不同于数据库的default。SQLObject从不使用数据库的default。 注意,创建一个对象时,构造方法的参数必须要指定列名,也就是映射类的属性名,否则会出现异常。 ·空值 如果在Person的实例中省略了firstName和lastName则会产生错误(by gashero),因为没有赋予缺省值。如果是赋予了缺省值的如middleInitial字段,则会被设为NULL值,等同于数据库的None。 ·查询 可以使用类的.get(n)方法得到已经存在的实例。 当创建一个对象时,SQLObject会自动将其存入数据库,而不像其他系统那样,需要手动提交修改。另外,对已有对象的属性修改也会直接存入数据库。 列可以按照属性来存取。注意,对象是独一无二的(unique),如果两次获取同一ID的记录,则获得的是同一对象。这种机制可以确保多个线程存取同一对象时的一致性。当然,多个线程之间可以不共享对象实例。但是在使用事务(transaction)时,因为事务的隔离性而不成立。 ·开启调试显示 同步显示SQL语句和调试状态。建立连接时使用debug选项: mysql://user:passwd@host:port/database?debug=t 或: Person._connection.debug=True 还可以选用的其他选项包括debugOutput(缺省为False),cache(True),autoCommit(True),debugThreading(False)。 在可以看到SQL语句的情况下可以清除的理解工作过程(by gashero)。只需在连接URI中加入"?debug=t"即可。或者设置debug属性。这样,所有的SQL语句都会打印到控制台。这是可靠的,也推荐使用。·set方法用于微弱的提高性能,一次指定多个属性,如:>>> p.set(firstName="Robert",lastName="Hope Jr.")·懒惰的更新缺省时,每修改一个属性就会导致一个UPDATE的发生,或者每次调用.set()时。如果想要避免(avoid)这种仿佛的更新,加入"_lazyUpdate=True"到类定义。这样只有在每次调用inst.syncUpdate()或者obj.sync()时才写入更新,.sync()也同时会取出数据库中的最新数据,而.syncUpdate()并不这样做。如果一个实例含有".sqlmeta.dirty"属性,就是用来指示含有未提交数据的属性。则插入动作会立即提交,这时是没有办法延迟提交的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |