1 github链接为:https://github.com/kennethreitz/records
 2 1)SQLite 数据库连接串:
 3   sqlite:///:memory: (or, sqlite://)
 4   sqlite:///relative/path/to/file.db
 5   sqlite:////absolute/path/to/file.db
 6   例:db = records.Database(‘sqlite:///users.db’)
 7 2)Oracle 数据库连接示例:
 8   先安装 cx_Oracle
 9   oracle://root:1234@ORCL
10 3)MySQL 数据库连接串示例:
11   mysql://root:12345@localhost/mydb?charset=utf8
12 4)PostgreSQL 数据库连接串示例:
13   postgresql://postgres:1234@localhost/mydb
14 5)SQL Server 数据库连接示例:
15   首先安装 pymssql
16   mssql+pymssql://sa:12345@localhost:1433/mydb
17 注意:
18   有些数据库连接方式因第三方模块不同,连接方式可能有多种,上述只是展示其中某一种连接方式,更详细的连接方式请参考 SQLAlchemy。
1 使用步骤:
 2   连接数据库,返回 db 数据库对象
 3   db 对象执行 sql 语句
 4 # pip install records 安装
 5 import records
 6 # 获取数据库
 7 db = records.Database('mysql+pymysql://root:@localhost:3306/dev01_git')
 8 # 查询
 9 rows = db.query('select * from lemon_user')  # 获取数据库的格式是标准的 URL 格式,如果使用的不是 mysql 数据库,只需要换掉数据库类型就可以了

 

1 二、创建表
 2   # 连接数据库
 3   db = records.Database('mysql+pymysql://root:@localhost:3306/dev01_git')
 4 
 5   # 创建表
 6   sql_create_table = """CREATE TABLE IF NOT EXISTS lemon_user (
 7       name varchar(20),
 8       age int
 9   ) DEFAULT CHARSET=utf8 ;"""
10 
11   db.query(sql_create_table)
12 
13 
14 三、插入单条数据
15   records 支持使用:variable 定义变量,通过参数传入完成动态传值,在需要动态加载数据的时候非常有用:
16 
17   user = {"name": "yuze5", "age": 20}
18   db.query('INSERT INTO lemon_user(name,age) values (:name, :age)', **user)
19 
20 四、插入多条数据
21   sql 语句在执行多条数据操作的时候非常不方便,尤其是当值还是变化的时候。 records 提供的 bulk_query 方法能快捷的插入和更新多条数据:
22 
23   users = [
24       {"name":"yuze", "age": 13},
25       {"name":"yuze2", "age": 15},
26       {"name":"yuze3", "age": 16}
27   ]
28   db.bulk_query('INSERT INTO lemon_user(name,age) values (:name, :age)', users)
29 
30 五、数据查询
31   查询到数据以后,可以通过 all() 方法获取所有的记录,支持 3 种类型。默认是自己封装的 RecordCollection 对象,也可以通过 as_dict=True 参数转成字典形式,可以通过 as_ordereddict=True 转成排序字典形式
32 
33   rows = db.query('SELECT * FROM lemon_user;')
34   # 得到所有数据
35   print(rows.all())
36   # 字典形式展示
37   print(rows.all(as_dict=True))
38   # 获取第一个
39   print(rows.first())
40   # 以字典形式获取第一个
41   print(rows.first(as_dict=True))
42   # 排序字典
43   print(rows.first(as_ordereddict=True))
44   # 查询唯一的一个
45   print(rows.one())
46   # 转为表格形式
47   print(rows.dataset)
48   # 转为json
49   print(rows.as_dict())
50   # 遍历
51   for r in rows:
52       # 多种获取方式
53       print(r.id, r['uname'], r[2])
54 
56 
57 安全参数化:
58   # Records 支持安全参数化,使用 :variable 定义变量,使用字典传入参数值
59   params = {'id':1}
60   rows = db.query('select * from a_user where id = :id',**params)
61 
62 
64 
65 六、简洁的数据库事务支持
66   数据库事务是经常需要使用到的数据库操作,他通常是为了保持数据原子性和一致性。
67 比如一个转账的数据库操作:
68 1、从 yuze 账号中读取余额 ,
69 2、对 yuze 账号余额减去转账 - 400 
70 3、从 chaoge 账号中把余额读出来 
71 4、对 chaoge 账号做加法操作(+400)。我们必须保证这 4 步同时执行成功,要么同时都不成功。如果前 2 步已经执行成功,但是到第 3 步发生了错误导致后面都不能执行,就会出现问题:yuze 的账号被扣了钱,但是 chaoge 的账号却没有加钱。通过数据库事务就能避免这种情况。
72 
73 with db.transaction() as tx:
74     user = {"name": "yuze9", "age": 20}
75     tx.query('INSERT INTO lemon_user(name,age) values (:name, :age)', **user)
76     # 下面是错误的 sql 语句,有错误,则上面的 sql 语句不会成功执行。
77     tx.query('sof')
1 事务支持:
 2   t = Database.transaction();
 3   t.commit()
 4 
 5 
 6 demo:
 7   db = records.Database()
 8   tx = db.transaction()
 9   try:
10     db.query(...)
11     db.query(...)
12     tx.commit()
13   except:
14     tx.rollback()

 

1 数据导出功能:
 2 Records 还具有完整的 Tablib 集成功能,允许将结果导出到 CSV、XLS、JSON、HTML Tables, YAML、Pandas DataFrames。非常适合与朋友共享数据或生成报告。
 3 
 4 1. 以 dataset 方式导出
 5   dataset = rows.dataset
 6   print(dataset)
 7 
 8 结果:
 9   id|cid|uname 
10   --|---|------
11   1 |100|tom1  
12   2 |100|cat1  
13 
14 2. 以 csv 方式导出:结果以逗号分隔
15   csv = rows.export('csv')
16   print(csv)
17 
18 结果:
19   id,cid,uname
20   1,100,tom1
21   2,100,cat1
22 
23 3. 以 yaml 方式导出
24   yaml = rows.export('yaml')
25   print(yaml)
26 
27   结果:
28   - cid: 100
29     id: 1
30     uname: tom1
31   - cid: 100
32     id: 2
33     uname: cat1
34 
35 4. 以 JSON 方式导出:js对象表示法
36   jn = rows.export('json')
37   print(jn)
38 
39   结果:
40   [{"id": 1, "cid": 100, "uname": "tom1"}, {"id": 2, "cid": 100, "uname": "cat1"}]
41 
42   demo:
43     rows = db.query('SELECT * FROM lemon_user;')
44     json_rows = rows.export('yaml')
45     print(json_rows)
46 
47   # 把数据写入yaml 文件里面
48   with open("222.yaml", "w", encoding="utf-8") as f:
49       f.write(json_rows)
50 
51 
52 
53 5. 以 xls/xlsx 方式导出
    demo1
54     xls = rows.export('xls')
55     print(xls)  # b'\xd0\xcf\x11\xe0\xa1\xb1.......'
56 
    demo2
57   with open('E://report.xls', 'wb') as f:
58       f.write(rows.export('xls'))
59   demo3
60   rows = db.query('SELECT * FROM lemon_user;')
61   with open('users.xlsx', 'wb') as f:
62       f.write(rows.export('xlsx'))
63 
64 
65 6. 以Pandas DataFrame 方式导出
66   首先安装好 pandas 模块。
67   rows = db.query('select * from a_user')
68   df = rows.export('df')
69   print(df)
70 
71 结果:
72      id   cid   uname
73 0     1   100    tom1
74 1     2   100    cat1
75 2     3   100  kitty1