ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

python3---操作数据库(mysql)

2021-03-22 20:31:21  阅读:232  来源: 互联网

标签:info cursor name pymysql --- host conn mysql python3


操作MySQL

简介:

  • Python3操作Mysql数据库 可以使用的模块式pymysql 和 MySQLdb。

  • 这两个模块都是通过自己的API执行原生的SQL语句实现的。

  • MySQLdb式最早出现的一个操作MySQL数据库的模块,核心由C语言编写,接口精炼,性能最棒,缺点式环境依赖较多,安装稍复杂,特别是Windows中不好安装,更新较慢

  • pymysql 为替代SQL而生,纯python实现, API的接口与MySQL完全兼容,安装方便。

实验演示

注意:数据库需要在 MySQL 中先创建出来

create database host_info  default charset utf8mb4 collate utf8mb4_general_ci;
  • 注意授权
grant all on *.* to root@'%'  identified by 'Lwq@Lzy123';

安装包 pymysql

  • pymsql是Python中操作MySQL的模块
pip3 install pymysql

基本操作:

  • 创建表
import pymysql
  
# 创建连接
conn = pymysql.connect(
    host='127.0.0.1',  #数据库地址
    port=3306,             # 数据库端口
    user='root',           # 连接数据库的用户
    passwd='123',    # 连接数据库的密码
    db='host_info',   # 数据库的库名,需要先在 MySQL 里创建
    charset='utf8mb4'         # 字符集
)
# 获取游标对象
# cursor = conn.cursor()  
# ((1,), (2,))
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# [{"id": 1}, {"id": 2}]

# 定义 sql 语句, 创建第一个表 服务器基础信息表 base_info
sql = """
create table base_info
 (id int auto_increment primary key, 
  host_name varchar(64) not null, 
  kernel varchar(64),
  os varchar(64),
  manufacturer varchar(32),
  pod_name varchar(64),
  sn varchar(128),
  cpu_name varchar(64)
)"""


# 执行 sql 语句
cursor.execute(sql)
  
# 提交更改
conn.commit()

# 关闭游标对象
cursor.close()

# 关闭连接对象
conn.close()
  • 插入数据
import pymysql
  
# 创建连接
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    passwd='QFedu123@',
    db='host_info',
    charset='utf8mb4'
)

# 获取游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 数据
base_info = {
     "manufacturer": "VMware, Inc.",
     "pod_name": "VMware7,1",
     "sn": "VMware-56 4d 2b 4b 91 1e 48 15-5b d2 73 9c ec 98 da 22",
     "host_name": "qfedu.com",
     "kernel": "3.10.0-957.el7.x86_64",
     "os": "CentOS Linux release 7.6.1810 (Core)",
     "cpu_name": "Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz"
}

# 一次插入一条数据, 并且使用 pymysql 定义的变量占位符
# 编写语句的时候,字段的顺序需要和上面字段的字典中的 key 的顺序一致
sql = '''
 insert into base_info(
   manufacturer,
   pod_name,
   sn,
   host_name,
   kernel,
   os, 
   cpu_name
) values(%s, %s, %s, %s, %s, %s, %s);'''

# 注意这里不是 Python 的字符串格式化,所以传值的时候不需要使用 %
# cursor.execute(sql, ("v1", "v2"))
cursor.execute(sql, tuple(base_info.values()))

# 数据库中受影响的行数
print(cursor.rowcount)

conn.commit()
cursor.close()
conn.close()

一次插入多条数据

import pymysql
  
# 创建连接
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    passwd='123',
    db='host_info',
    charset='utf8mb4'
)

# 获取游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

base_info = {
     "manufacturer": "VMware, Inc.",
     "pod_name": "VMware7,1",
     "sn": "VMware-56 4d 2d 4c 91 1e 48 15-5b d2 73 9c ec 98 da 22",
     "host_name": "sharkyum.com",
     "kernel": "3.10.0-957.el7.x86_64",
     "os": "CentOS Linux release 7.6.1810 (Core)",
     "cpu_name": "Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz"
}

sql = '''
 insert into base_info(
   manufacturer, pod_name,
   sn, host_name,
   kernel, os, cpu_name
) values(%s, %s, %s, %s, %s, %s, %s);'''


# 语法:
# cursor.executemany(sql, [("v1","v2"), ("v3", "v4")])
"""
datas = []
for d in ...:
   # 把每条数据构造成元组("v1", "v2", 100)
   datas.append(d)

"""
infos = [
   tuple(base_info.values()),
    tuple(base_info.values())
]
cursor.executemany(sql, infos)
print(cursor.rowcount)
conn.commit()
cursor.close()
conn.close()
  • 查询数据
import pymysql, json
  
# 创建连接
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    passwd='123',
    db='host_info',
    charset='utf8mb4'
)

# 获取游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 定义一个查询语句
query_sql = """
select id, host_name, os 
from base_info 
where id > %s;
"""

# 执行查询语句,并且返回得到结果的行数
row_nums = cursor.execute(query_sql, (1))

"""
获取到数据结果集具有迭代器的特性:
1. 可以通过索引取值,可以切片
2. 结果集中的数据每次取出一条就少一条
"""

# 获取结果集中的第一条数据, 注意不是整个表的第一条数据
one_data = cursor.fetchone()

# 获取结果集中接下来的 2 条数据
many_data = cursor.fetchmany(2)

# 获取结果集中剩余的全部数据 
all_data = cursor.fetchall()

cursor.close()
conn.close()
print("-" * 10)
print(f"共返回数据{row_nums}:")
print("-" * 25)
print(json.dumps(one_data, indent=4))
print("-" * 25)
print(json.dumps(many_data, indent=4))
print("-" * 25)
print(json.dumps(all_data, indent=4))

标签:info,cursor,name,pymysql,---,host,conn,mysql,python3
来源: https://blog.csdn.net/weixin_43272125/article/details/115095701

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有