python records库_python records操作数据库

records

简单了解:

Records 是一个非常简单但功能强大的库,用于对大多数关系数据库进行原始SQL查询。

只需编写SQL。没有钟声,没有哨声。使用可用的标准工具,这一常见任务可能会令人惊讶地困难。该库努力使此工作流程尽可能简单,同时提供一个优雅的界面来处理您的查询结果。

数据库支持包括RedShift,Postgres,MySQL,SQLite,Oracle和MS-SQL(不包括驱动程序)。

安装:pip install records

使用:

调用 records.Database(......) 连接数据库,返回 数据库对象

对象执行 sql 语句,详细见下。

1、连接数据库:

import records

# 连接数据库

db = records.Database('mysql://root:xuyang@localhost:3306/ceshi?charset=utf8mb4', pool_recycle=3600) # MySQL默认连接8小时后自动断连,加参数pool_recycle每一小时重连 A Database. Encapsulates a url and an SQLAlchemy engine with a pool of connections.

print(db) # 对象

# --------------------------

print(db.get_table_names()) # Returns a list of table names for the connected database.

print(db.get_connection) # Get a connection to this Database. Connections are retrieved from a pool.

2、删除表

table_name = 'userinfo' # 数据表的表名

drop_table_sql = """drop table if exists {};""".format(table_name)

db.query(drop_table_sql)

3、创建表

create_table_sql = """create table if not exists {} (

name varchar(20),

age int

) default charset=utf8;""".format(table_name)

db.query(create_table_sql)

4、插入数据

插入单条

# records 支持使用 :variable 定义变量,通过参数传入完成动态传值,在需要动态加载数据的时候非常有用:

user = {"name": "user0", "age": 20}

db.query('insert into userinfo(name, age) values(:name, :age)', **user)

插入多条

# records 提供的 bulk_query 方法能快捷的插入和更新多条数据:

users = [

{"name":"user1", "age": 21},

{"name":"user2", "age": 22},

{"name":"user3", "age": 23}

]

db.bulk_query('insert into userinfo(name, age) values(:name, :age)', users)

5、查询数据

rows = db.query('select * from userinfo;')

# print(rows) #

# print(rows.all()) # 默认是自己封装的 RecordCollection 对象:[, , , ]

# print(rows.all(as_dict=True)) # 可以通过 as_dict=True 参数转成 字典形式:[{'name': 'user0', 'age': 20}, {'name': 'user1', 'age': 21}, {'name': 'user2', 'age': 22}, {'name': 'user3', 'age': 23}]

# print(rows.all(as_ordereddict=True)) # 通过 as_ordereddict=True 转成 排序字典形式:[OrderedDict([('name', 'user0'), ('age', 20)]), OrderedDict([('name', 'user1'), ('age', 21)]), OrderedDict([('name', 'user2'), ('age', 22)]), OrderedDict([('name', 'user3'), ('age', 23)])]

# print(rows.first()) #

# print(rows.first(as_dict=True)) # {'name': 'user0', 'age': 20}

# print(rows.first(as_ordereddict=True)) # OrderedDict([('name', 'user0'), ('age', 20)])

# # print(rows.one()) # 查询唯一的一个。我自己这里报错

userinfo_dict = rows.as_dict() # 转换成 字典

print(userinfo_dict[0]['age']) # 20

# 可 遍历 rows

for row in rows:

print(row.name)

6、数据导出为 json

print(rows.export('json'))

json_rows = rows.export('yaml')

print(json_rows)

# ------------------------------

with open('userinfo.json', 'w') as fp:

fp.write(rows.export('json'))

输出如下:

[{"name": "user0", "age": 20}, {"name": "user1", "age": 21}, {"name": "user2", "age": 22}, {"name": "user3", "age": 23}]

- {age: 20, name: user0}

- {age: 21, name: user1}

- {age: 22, name: user2}

- {age: 23, name: user3}

7、数据导出到 Excel 文件

with open('userinfo.xlsx', 'wb') as f:

f.write(rows.export('xlsx'))

8、转为表格形式

print(rows.dataset)

输出如下:

name |age

-----|---

user0|20

user1|21

user2|22

user3|23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值