——简单整理翻译自官方文档:http://www.pygresql.org/contents/tutorial.html
- 创建数据库连接
只需import DB类并创建一个实例,填入相应的连接信息,例:
1 2 |
>>> from pg import DB >>> db = DB(dbname='testdb', host='pgserver', port=5432, user='scott', passwd='tiger') |
如果省略参数,则会使用默认值:
dbname,user默认为当前系统用户,host为localhost,port为5432。
- 执行SQL语句
DB.query()
1 |
>>> db.query("create table fruits(id serial primary key, name varchar)") |
- 获取所有表名
DB.get_tables(),类似psql中\d:
1 2 |
>>> db.get_tables() ['public.fruits'] |
- 获取表属性
DB.get_attnames(),类似psql中\d table:
1 2 |
>>> db.get_attnames('fruits') {'id': 'int', 'name': 'text'} |
- 检查权限
DB.has_table_privilege()
1 2 |
>>> db.has_table_privilege('fruits', 'insert') True |
- 插入数据
DB.insert() –注:GP不支持
1 2 |
>>> db.insert('fruits', name='apple') {'name': 'apple', 'id': 1} |
该方法将完整的行作为字典返回,包括自增列。可以将字典赋值给变量:
1 |
>>> banana = db.insert('fruits', name='banana') |
- 批量插入数据
Connection.inserttable()
在插入大量数据时,批量插入性能比单条插入快很多
1 2 3 |
>>> more_fruits = 'cherimaya durian eggfruit fig grapefruit'.split() >>> data = list(enumerate(more_fruits, start=3)) >>> db.inserttable('fruits', data) |
- 查询数据
DB.query()
1 2 3 4 5 6 7 8 9 10 11 |
>>> print(db.query('select * from fruits')) id| name --+---------- 1|apple 2|banana 3|cherimaya 4|durian 5|eggfruit 6|fig 7|grapefruit (7 rows) |
将查询结果放入元组:
1 2 3 |
>>> q = db.query('select * from fruits') >>> q.getresult() ... [(1, 'apple'), ..., (7, 'grapefruit')] |
或字典:
1 2 |
>>> q.dictresult() [{'id': 1, 'name': 'apple'}, ..., {'id': 7, 'name': 'grapefruit'}] |
或named tuple:
1 2 3 |
>>> rows = q.namedresult() >>> rows[3].name 'durian' |
使用DB.get_as_dict()可以轻松的将整张表数据加载到Python 字典中:
1 2 3 4 5 6 7 8 |
>>> db.get_as_dict('fruits', scalar=True) OrderedDict([(1, 'apple'), (2, 'banana'), (3, 'cherimaya'), (4, 'durian'), (5, 'eggfruit'), (6, 'fig'), (7, 'grapefruit')]) |
- 修改数据
DB.update()
1 2 3 4 5 6 7 8 9 |
>>> db.update('fruits', banana, name=banana['name'].capitalize()) {'id': 2, 'name': 'Banana'} >>> print(db.query('select * from fruits where id between 1 and 3')) id| name --+--------- 1|apple 2|Banana 3|cherimaya (3 rows) |
也可使用DB.query()
1 2 |
>>> db.query('update fruits set name=initcap(name)') '7' |
返回值:‘7’表示更新的行数。
- 删除数据
DB.delete()
1 2 |
>>> db.delete('fruits', banana) 1 |
1表示删除的行数,再次执行就会显示0行被删除:
1 2 |
>>> db.delete('fruits', banana) 0 |
- 删除表
1 |
>>> db.query("drop table fruits") |
- 关闭连接
1 |
>>> db.close() |
更高级的特性和详细信息,参阅:http://www.pygresql.org/contents/pg/index.html