Python实现MySql数据库交互的示例
作者:smart_cat 发布时间:2024-01-23 02:41:13
一、使用MySql进行持久化存储
在任何应用中,都需要持久化存储。一般有 3 种基础的存储机制:文件、数据库系统以及一些混合类型。这种混合类型包括现有系统上的 API、 ORM、文件管理器、电子表格、配置文件等。
对于非常简单的应用而言,使用文件作为持久化存储通常就足够了,但是当文件或创建的数据存储系统不适用于大项目时,我们需要转而使用数据库,大多数复杂的数据驱动的应用是需要使用全功能的关系数据库的。
一个关系数据库管理系统( RDBMS)通常可以管理多个数据库,比如销售、市场、用户支持等,都可以在同一个服务端(如果 RDBMS 基于服务器,可以这样。不过一些简单的系统通常不是基于服务器的)。在本章将要看到的例子中, MySQL 是一种基于服务的RDBMS,因为它有一个服务器进程始终运行以等待命令行输入;而 SQLite 则不会运行服务器。
二、安装MySql数据库和Python库PyMySQL
在开始之前,请确保:
已经安装了MySql数据库并已经开启了相关服务。
正确安装名为PyMySQL的Python库。
MySql数据库的安装请参考另一片文章。此处不再赘述。
在python3中,如果想要将数据存储到mysql中,就需要借助PyMySQL来操作,安装的话,还是推荐使用pip来进行,简单快捷。
相关链接:
GitHub : https://github.com/PyMySQL/
PyMySQL官方文梢 : http://pymysql.readthedocs.io/
PyPl: https://pypi.python.org/pypi/PyMySQL
pip install pymysql
验证一下安装是否成功:
如果能够像上图输出版本信息,则表示PyMySQL已经成功安装。
三、使用pymysql链接mysql数据库
假设当前MySql服务器运行在本地,用户名为root,密码为123456,运行端口为3306。
尝试连接到数据库并创建一个新的数据库,名字叫testdb
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', port=3306)
cur = conn.cursor()
cur.execute('select version()')
data = cur.fetchone()
print(f'database version: {data}')
cur.execute('CREATE DATABASE testdb DEFAULT CHARACTER SET utf8')
conn.close()
能够正常输出版本,说明python已经能够成功连接到数据库。
在数据库中,也可以看到我们刚刚建立的新的数据库。
四、创建表
一般来说,创建数据库的操作只需要执行一次就好了。当然,我们也可以手动创建数据库 。
创建数据库后,在连接时需要额外指定一个参数 db 。
加下来,我们创建一个新的数据表students, 指定3个字段,如下所示:
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='testdb')
cur = conn.cursor()
sql = '''
CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))
'''
cur.execute(sql)
conn.close()
可以看到新的表已经创建成功了。
五、插入数据
这里仅演示一下数据的插入,其他的操作,比如删除数据、更新数据等等,请参考官方文档示例。
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='testdb')
cur = conn.cursor()
sdudent = [
('001', '张三', 12),
('002', '李四', 13),
('003', '王五', 14)]
try:
cur.executemany("INSERT INTO students(id, name, age) VALUES (%s, %s, %s)", sdudent)
conn.commit()
except:
conn.rollback()
conn.close()
查表,可以看到数据已经插入成功。
六、后记
注意,pymysql模块中不能使用占位符 ? , 这点与SQLite不一样。必须使用paramstyle = "pyformat"的风格。
比如
# 这么写会报错
cur.executemany("INSERT INTO students(id, name, age) VALUES (?, ?, ?)", sdudent)
发生异常: TypeError
not all arguments converted during string formatting
File “G:\Code\practice\testpython\mysql.py”, line 10, in
cur.executemany(“INSERT INTO students(id, name, age) VALUES (?, ?, ?)”, sdudent)
# 必须使用paramstyle = "pyformat"的风格
cur.executemany("INSERT INTO students(id, name, age) VALUES (%s, %s, %s)", sdudent)
详情在另一篇文章(《Python数据库编程之关系数据库API规范 》)里有描述,大致原因如下:
在整个数据库模块实现中没有关于占位符的标准规则。但是,每一个模块都定义了一个变量paramstyle, 它描述了将在查询中使用的值替换格式。这一变量可能的值如下:
来源:https://blog.csdn.net/hubing_hust/article/details/128157244


猜你喜欢
- 数据库操作类的优点优点可以说是非常多了,常见的优点就是便于维护、复用、高效、安全、易扩展。例如PDO支持的数据库类型是非常多的,与mysql
- 前言:在appium中adb命令的使用必不可少,做android测试嘛,adb命令肯定肯定是每天都要用的啦,所以今天给特地写个博客吧!这里就
- 求字符串中最大的递增子序列数据库环境:SQL SERVER 2005如题,求字符串“abcbklmnodfghijkmer”中最大的递增子序
- 有的小伙伴在学习数据库的时候,创建表结构的时候不小心把某字段设置成了varchar但是在统计求和的时候就傻眼了,接下来跟着小编学习一下,不用
- 简介工作中偶尔会出现一个查询数据的需求,那就是需要按天统计近一个月或其它一段时间内每天的所有记录或者分组数据,没有数据则自动补0。一般情况下
- PyQt5简介1.什么是GUI:Graphical User Interface,图形用户界面,用于人机交互。2.怎么设计GUI:Qt3.什
- 1、在Python中以相对路径或者绝对路径来导入文件或者模块的方法今天在调试代码的时候,程序一直提示没有该模块,一直很纳闷,因为我导入文件一
- 这几个技术都不是很新了,现在还拿出来说也就是为了教教新手了呵呵,各位大虾多多指正.css之所以出现就是为了实现数据与数据的表现形式的分离,
- python 判断是否为正小数和正整数的实例实现代码:def check_float(string): #支付时,输入的金额可能
- 简介🤔看了一圈,大家对 ts 封装 axios 都各有见解。但都不是我满意的吧,所以自己封装了一个💪。至于为什么敢叫最佳实践,因为我满意,就
- 目录全局中间件应用中间件路由中间件控制器中间件中间件传参6.0中间件分为系统中间件和应用中间件,系统中间件为核心框架内置的中间件,应用中间件
- 本文介绍基于Python语言,实现对多个不同Excel文件进行数据读取与平均值计算的方法。首先,让我们来看一下具体需求:目前有一个文件夹,其
- 本文实例为大家分享了python xlsxwriter创建excel图表的具体代码,供大家参考,具体内容如#coding=utf-8 imp
- mysql使用left join连接出现重复问题描述在使用连接查询的时候,例如以A表为主表,左连接B表,我们期望的是A表有多少条记录,查询结
- 一、前言假设现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作。比如说应用到我们之前的音乐高潮提取
- 本文介绍了vue.js $refs和$emit 父子组件交互的方法,分享给大家,废话不多说直接看代码:<strong>父调子 $
- 本文实例为大家分享了python实现简单图片物体标注工具的具体代码,供大家参考,具体内容如下# coding: utf-8"&qu
- 一、torch.utils.data.DataLoader 简介作用:torch.utils.data.DataLoader 主要是对数据进
- 环境: Python3 + windows。开发工具:Anaconda + Jupyter / VS Code。学习效果:1.认识爬虫 /
- 前言需求: 必须现在需要动态创建16个list,每个list的名字不一样,但是是有规律可循,比如第一个list的名字叫:arriage_li