sql
模块¶
只是为了向后兼容¶
- class gluon.sql.DAL(*args, **kwargs)[源代码]¶
基类:
pydal.helpers.classes.Serializable
,pydal.helpers.classes.BasicStorage
此类的实例表示数据库连接
- 参数
uri (str) -- 包含连接到数据库的信息。默认为 'sqlite://dummy.db' 。。注意::实验性:可以将字典指定为uri参数,即::db=DAL({“uri”:“sqlite://storage.sqlite”,“tables”:{.},.})有关dict输入的示例,您可以使用db.as_dict()检查脚手架db模型的输出。请注意,由于wwarg名称的语法限制,为了与2.6.5版之前的Python兼容,您应该将dict输入键转换为str。对于正确的DAL字典输入,您可以使用以下之一::obj=Serializers.cast_key(dict, [encoding="utf-8"] )#或否则(用于解析json输入)obj=Serializers.loadsjson(data,unicode_key=false)
pool_size -- 要与数据库对象建立多少打开的连接。
folder -- 其中将创建.table文件。在web2py中自动设置。在web2py外部使用dal时使用显式路径
db_codec -- 数据库的字符串编码(默认值:“utf-8”)
table_hash -- 带有.tables的数据库标识符。如果您的连接散列发生更改,如果旧的.tables以table_hash为前缀,则您仍然可以使用它们
check_reserved -- 根据SQL/NoSQL保留关键字检查表名和列名的适配器列表。默认为 None -“common”所有数据库类型(如“select,insert”)通用的SQL关键字列表。(推荐)-'all'检查所有已知的SQL关键字-“<adaptername>”,检查特定的适配器关键字列表-“<adaptername>不响应”检查特定的适配器不响应关键字列表。(如果有的话)
migrate -- 设置所有表的默认迁移行为
fake_migrate -- 为所有表设置默认的假迁移行为
migrate_enabled -- 如果设置为false,则禁用所有迁移
fake_migrate_all -- 如果设置为true,则假迁移所有表
attempts -- 尝试连接的次数
auto_import -- 如果设置为true,则尝试从“数据库”文件夹中自动导入表定义(仅适用于简单模型)
bigint_id -- 如果已设置,请为ID和引用字段启用bigint而不是int。
lazy_tables -- 将表定义延迟到表访问
after_connection -- 连接后将执行的可调用文件
例子
用作:
db = DAL('sqlite://test.db')
或:
db = DAL(**{"uri": ..., "tables": [...]...}) # experimental db.define_table('tablename', Field('fieldname1'), Field('fieldname2'))
- class Field(*args, **kwargs)¶
基类:
pydal.objects.Expression
,pydal.helpers.classes.Serializable
- as_dict(flat=False, sanitize=True)¶
- bind(table)¶
- clone(point_self_references_to=False, **args)¶
- count(distinct=None)¶
- formatter(value)¶
- property longname¶
- retrieve(name, path=None, nameonly=False)¶
如果 nameonly==True 返回(filename,fullfilename)而不是(filename,stream)
- retrieve_file_properties(name, path=None)¶
- set_attributes(*args, **attributes)¶
- property sqlsafe¶
- property sqlsafe_name¶
- store(file, filename=None, path=None)¶
- validate(value, record_id=None)¶
- class Row(*args, **kwargs)¶
基类:
pydal.helpers.classes.BasicStorage
一本能让你做数据的字典。 ['a'] 和D.A一样,这只用于存储 Row
- as_dict(datetime_to_str=False, custom_types=None)¶
- as_json(mode='object', default=None, colnames=None, serialize=True, **kwargs)¶
将行序列化为JSON对象。Kwargs将传递给。仅支持“Object”模式。
serialize = False 由rows.as_json使用
TODO:按查询列顺序返回数组模式
未实现模式和列名
- as_xml(row_name='row', colnames=None, indent=' ')¶
- get(key, default=None)¶
- class Rows(db=None, records=[], colnames=[], compact=True, rawrows=None, fields=[])¶
基类:
pydal.objects.BasicRows
select返回值的包装。它基本上代表一个表。它有一个迭代器,每一行表示为 Row 字典。
- append(row)¶
- column(column=None)¶
- exclude(f)¶
从调用行对象中删除元素,由函数筛选 f ,并返回包含已删除元素的New Rows对象
- find(f, limitby=None)¶
返回由函数筛选的新行对象(原始对象的子集) f
- first()¶
- group_by_value(*fields, **args)¶
按字段之一重新分组行
- insert(position, row)¶
- join(field, name=None, constraint=None, fields=[], orderby=None)¶
- last()¶
- render(i=None, fields=None)¶
获取索引并返回索引行的副本,其中的值通过关联字段的“表示”属性转换。
- 参数
i -- 索引。如果未指定,则返回一个生成器以对所有行进行迭代。
fields -- 要转换的字段列表(如果没有,则将转换具有“表示”属性的所有字段)
- setvirtualfields(**keyed_virtualfields)¶
参考文献:
db.define_table('x', Field('number', 'integer')) if db(db.x).isempty(): [db.x.insert(number=i) for i in range(10)] from gluon.dal import lazy_virtualfield class MyVirtualFields(object): # normal virtual field (backward compatible, discouraged) def normal_shift(self): return self.x.number+1 # lazy virtual field (because of @staticmethod) @lazy_virtualfield def lazy_shift(instance, row, delta=4): return row.x.number+delta db.x.virtualfields.append(MyVirtualFields()) for row in db(db.x).select(): print row.number, row.normal_shift, row.lazy_shift(delta=7)
- sort(f, reverse=False)¶
返回已排序元素的列表(未就地排序)
- class Table(db, tablename, *fields, **args)¶
基类:
pydal.helpers.classes.Serializable
,pydal.helpers.classes.BasicStorage
表示数据库表
- 例子::
- 可以将表创建为:
db=dal(…)db.define_table('users',field('name'))
然后::
db.users.insert(name='me') # print db.users._insert(...) to see SQL db.users.drop()
- as_dict(flat=False, sanitize=True)¶
- bulk_insert(items)¶
这是字典的列表
- create_index(name, *fields, **kwargs)¶
- drop(mode='')¶
- drop_index(name, if_exists=False)¶
- property fields¶
- import_from_csv_file(csvfile, id_map=None, null='<NULL>', unique='uuid', id_offset=None, transform=None, validate=False, encoding='utf-8', **kwargs)¶
从csv文件导入记录。列标题必须与表字段具有相同的名称。字段“id”被忽略。如果列名为'table.file'则忽略'table.'前缀。
“unique”参数是一个必须唯一的字段(通常是一个uuid字段)
“restore”参数是默认值false;如果设置为true,将首先删除表中的旧值。
“id_map”如果设置为“none”,则不会映射ID
导入将在还原的表中保留ID号。这假设有一个ID类型的字段是整数,并且是递增的。将保留还原表中的ID号。
- insert(**fields)¶
- on(query)¶
- query_name(*args, **kwargs)¶
- property sql_fullref¶
- property sql_shortref¶
- property sqlsafe¶
- property sqlsafe_alias¶
- truncate(mode='')¶
- update(*args, **kwargs)¶
- update_or_insert(_key=<function <lambda>>, **values)¶
- validate_and_insert(**fields)¶
- validate_and_update(_key, **fields)¶
- validate_and_update_or_insert(_key=<function <lambda>>, **fields)¶
- with_alias(alias)¶
- executesql(query, placeholders=None, as_dict=False, fields=None, colnames=None, as_ordered_dict=False)[源代码]¶
执行任意查询
- 参数
query (str) -- 要提交到后端的查询
placeholders -- 是可选的,并且始终为无。如果将原始SQL与占位符一起使用,则占位符可能是要在或(如果数据库驱动程序支持)中替换的值序列,该字典中的键与SQL中的命名占位符匹配。
as_dict -- 使用DAL时始终为“无”。如果可以将using raw sql设置为true,并且db驱动程序返回的结果光标将转换为使用db字段名键入的字典序列。返回as_dict=true的结果与将.to_list()应用于DAL查询时返回的结果相同。如果“as _ordered_dict”=true,则行为与当“as _dict”=true时相同,保证键(字段名)的顺序与数据库上执行的select name返回的顺序相同。
fields -- 与从数据库返回的字段匹配的DAL字段列表。字段对象应该是DAL对象上定义的一个或多个表对象的一部分。“字段”列表可以包括一个或多个DAL表对象,除了或不包括字段对象,也可以只是一个表(不在列表中)。在这种情况下,将从表中提取字段对象。…注意::如果有 fields 或 colnames 如果提供,结果将转换为DAL Rows 对象使用 db._adapter.parse() 方法
colnames -- tablename.fieldname格式的字段名列表
注解
也可以同时指定“字段”和相关的“列名”。在这种情况下,“字段”除了字段对象之外还可以包括DAL表达式对象。对于“字段”中的字段对象,关联的“colname”必须仍然采用tablename.fieldname格式。对于“字段”中的表达式对象,关联的“列名”可以是任意标签。
“fields”或“colname”引用的dal表对象可以是虚拟表,不必表示数据库中的任何实表。另外,请注意,“字段”和“列名”的顺序必须与从数据库返回的结果光标中的字段的顺序相同。
- execution_handlers = [<class 'pydal.helpers.classes.TimingHandler'>]¶
- static get_instances()[源代码]¶
返回一个以uri作为键的字典,其中包含计时和定义的表::
{'sqlite://storage.sqlite': { 'dbstats': [(select auth_user.email from auth_user, 0.02009)], 'dbtables': { 'defined': ['auth_cas', 'auth_event', 'auth_group', 'auth_membership', 'auth_permission', 'auth_user'], 'lazy': '[]' } } }
- import_from_csv_file(ifile, id_map=None, null='<NULL>', unique='uuid', map_tablenames=None, ignore_missing_tables=False, *args, **kwargs)[源代码]¶
- logger = <Logger pyDAL (WARNING)>¶
- record_operators = {'delete_record': <class 'pydal.helpers.classes.RecordDeleter'>, 'update_record': <class 'pydal.helpers.classes.RecordUpdater'>}¶
- representers = {'rows_render': <function represent>, 'rows_xml': <class 'gluon.sqlhtml.SQLTABLE'>}¶
- serializers = {'json': <function custom_json>, 'xml': <function xml>}¶
- property tables¶
- uuid()¶
- validators = None¶
- validators_method(field)¶
字段类型验证,使用Web2py的验证机制。
确保字段的内容与声明的FieldType一致