mysql数据库中如何获取拼音字母_数据

操作MySQL,我们都习惯于用pymsq,基本流程就是

  1. 创建连接
  2. 创建游标
  3. 执行SQL
  4. 关闭连接

代码是这样的


import pymysql

# 1.创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')

# 2.创建游标
cursor = conn.cursor()

# 3.执行sql语句
cursor.execute('select * from user where xxx')

result=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目

# 关闭连接,游标和连接都要关闭
cursor.close()
conn.close()

而今天要说的库,可以快速的进行查询,比pymysql好使,不再需要操作游标。即:records库,网上关于这个库的资料其实并不多。 

什么?你没听过,所以不敢用?那你总知道requests库吧,其实这两个库都是同一个作者写的。

这个库不光支持MySQL,同样还只是PostgreSQL,SQLite,Oracle等..

项目地址:https://github.com/kennethreitz/records

安装 : pip install records mysqlclient

创建一个user_demo表


import records

# 获取数据库连接
db = records.Database('mysql+pymysql://root:root@localhost:3306/records_test')

# 创建表的sql
create_sql = """CREATE TABLE IF NOT EXISTS user_demo (
        id int(11) PRIMARY KEY AUTO_INCREMENT,
        name varchar(20),
        age int
);"""
# 执行
db.query(create_sql)


获取数据库连接的格式是标准的url格式具体看下图

mysql数据库中如何获取拼音字母_mysql数据库中如何获取拼音字母_02

插入数据

对于records,插入单条和多条数据都比较方便,而且还支持动态加载数据。


# 获取数据库连接
db = records.Database('mysql+pymysql://root:root@localhost:3306/records_test')

# 插入一条数据
db.query("INSERT INTO user_demo(name, age) VALUE ('tom', 19)")

# 通过参数传值动态插入一条
user = {'name': 'liming', 'age': 20}
db.query("INSERT INTO user_demo(name, age) VALUE (:name, :age)", **user)

# 插入多条
users = [
    {'name': '二狗子', 'age': 14},
    {'name': '二柱子', 'age': 12},
    {'name': '翠花', 'age': 9}
]
# records的bulk_query方法支持插入和更新多条数据
db.bulk_query ("INSERT INTO user_demo(name, age) VALUES (:name, :age)", users)


执行之后,再查询数据库,发现都正常插入了;


mysql> select * from user_demo;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | tom    |   19 |
|  2 | liming |   20 |
|  3 | 二狗子 |   14 |
|  4 | 二柱子 |   12 |
|  5 | 翠花   |    9 |
+----+--------+------+
5 rows in set (0.00 sec)


查询数据

records默认是返回封装的RecordCollection对象,当然我们也可以通过调整某些参数,获取到不一样的数据类型。

  • as_dict = True:通过字典的形式返回数据
  • as_ordereddict=True:以排序字典的形式返回数据

代码示例:


rows = db.query('select * from user_demo')
# 获取全部数据
print(rows.all())
# 获取第一条数据
print(rows.first())  # <Record {"id": 1, "name": "tom", "age": 19}>

# 以字典的形式获取数据
print(rows.all(as_dict=True))
print(rows.first(as_dict=True))

# 排序字典
print(rows.first(as_ordereddict=True)) # OrderedDict([('id', 1), ('name', 'tom'), ('age', 19)])

事务

数据库事务是构成单一逻辑工作单元的操作合集,生活中最好的例子就是转账操作,A给B转账100元,先从A的账户扣除100,再给B的账户加100。如果再给B账户加100的过程程序出现异常,就会导致A莫名其妙的被扣了100。事务就是用来解决这种问题的,保证一个执行单元,要么都执行成功,要么就都不成功。

records同样也支持事务。代码如下:


with db.transaction() as t:
    user1 = {'name': '狗蛋', 'age': 8}
    user2 = {'id': 1, 'name': '锤子', 'age': 10}
    t.query("INSERT INTO user_demo(name, age) VALUE (:name, :age)", **user1)
    print("user1 已执行插入...")
    t.query("INSERT INTO user_demo(id,name, age) VALUE (:id,:name, :age)", **user2)
    print('user2 已执行插入...')


数据存中已经存在了id为1的信息,因此执行user2的时候,会导致主键冲突。 控制台输出:


user1 已执行插入...

并没有输出‘user2 已执行插入...’ 说明执行插入user2的时候出现了主键冲突(数据库中已经存在id为1的数据了)。再去查看数据库,发现并没有name为狗蛋的数据,说明这是一个数据库事务的过程。在执行user2失败的时候,将已经执行成功的user1,进行了事务回滚。

数据导出

有时候我们需要将数据库的数据进行导出,比如存成文本或者Excel。强大的records可以直接进行导出操作。

导出csv文件


rows = db.query('select * from user_demo')
with open('user_demo.csv', 'wb') as f:
    f.write(rows.export('xlsl'))



mysql数据库中如何获取拼音字母_mysql_03



同样可以导出yaml、json、xlsl、pandas、html等格式。 导出方法为


rows.export('你要导出的格式')


例如导出Html格式:



rows = db.query('select * from user_demo')
with open('user_demo.html', 'wb') as f:
    f.write(rows.export('html').encode('utf-8'))



以上,便是今天的分享,希望大家喜欢


mysql数据库中如何获取拼音字母_数据_04



感谢您的阅读