Mysql存储之原生语句操作(pymysql)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Mysql存储之原生语句操作(pymysql)关系型数据库是基于关系模型的数据库,而关系模型是通过二维表时实现的,于是构成了行列的表结构。表可以看作是某个实体的集合,而实体之间存在联系,这个就需要通过表之间的关联关系来体现,比如主键的关联关系,多个表组成了一个数据库,也就是关系型数据库。

Mysql存储之原生语句操作(pymysql)

关系型数据库是基于关系模型的数据库,而关系模型是通过二维表时实现的,于是构成了行列的表结构。
表可以看作是某个实体的集合,而实体之间存在联系,这个就需要通过表之间的关联关系来体现,比如主键的关联关系,多个表组成了一个数据库,也就是关系型数据库。其中Mysql.oracle,sql server,sqlite等都属于关系型数据库,这里主要说mysql的操作。

原生语句操作

所谓的原生语句就是mysql自带的增删改查的语句,即insert,delete,update,select。下面我们用python3为例。
在python3中数据库的链接一般用pymsql模块。

第三方库的安装

pip install pymysql
创建数据库的链接

前提我们 配置好了mysql数据库,并且安装上了pymysql模块。
然后我们需要导入pymsql,看下面示例代码:

conn = pymysql.connect(host='localhost', 
port=3306, user='root', 
passwd='1234', db='user', charset='utf8mb4')#声明mysql连接对象
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#查询结果以字典的形式
cursor.execute(sql语句字符串)#执行sql语句
conn.close()#关闭链接
事务处理

事务机制可以确保数据的一致性,如果我们有个逻辑是删除一条数据然后插入,如果我们在插入过程中失败了,那么之前删除的数据没有进行插入,就造成了数据的缺失,为了避免这种缺失情况的发生,我们使用使用来进行统一处理,如果以上操作都成功了才提交,否则回滚,就当什么也没发生一样。用代码就下面的写法

try:
   cursor.execute(sql)
   conn.commit()
except:
   conn.rollback()
动态插入数据

传入一个动态变化的字典即可。

比如说一开始的时候我们有这样的一个表叫user,需要保存三个字段id,name,age然后我们可以构建下面的字典和表名

d={'id':'1001','name':'zhangsan','age':'17'}  

tables='user'

d={'id':'1001','name':'zhangsan','age':'17'}  
 
tables='user'
keys=','.join(d.key())
values=','.join(['%s']*len(d))
sql=f'INSERT INTO {table}({keys})VALUES({values})'
try:
   if cursor.execute(sql,tuple(d.values())):
                  print('ok')
                  conn.commit()
except:
     print('no')
     conn.rollback()
conn.close()

现在我们就完成了插入操作,但是有的时候我们需要 主键存在是更细,不存在时插入怎么办呢,首先我们看下面语句

动态更新插入数据

INSERT INTO user(id,name,age) VALUES(%s,%s,%s) ON DUPLICATE KEY UPDATE id=%s,name=%s,age=%s
ON DUPLICATE KEY UPDATE 

可以达到以下目的:

向数据库中插入一条记录:

若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作。

否则插入一条新的记录。

然后我们对上面整体做一个代码整理。如下

d={'id':'1001','name':'zhangsan','age':'17'}  
 
tables = 'name'
keys = ','.join(data_dic.keys())
values = ','.join(['%s'] * len(data_dic))
sql =f'INSERT INTO {tables}({keys})VALUES({values}) ON DUPLICATE KEY UPDATE '
update = ','.join([f"{k}={v}" for k,v in data_dic.items()])
sql += update
try:
   if cursor.execute(sql,tuple(d.values())):
                  print('ok')
                  conn.commit()
except:
     print('no')
     conn.rollback()
conn.close()
查询语句

查询语句就比较简单了用select。下面直接看代码

sql='select * from user limit 1,10'
cursor.excute(sql)
one=cursor.fetchone()
while one:
   one=cursor.fetchone()  
#推荐使用while循环配合fetchone读取所有数据,随用随取,效率高。
删除语句

删除语句用delete语句,但是只要commit里之后才能生效。

tale='user'
id='id=123'#可以直接把条件作为字符串传过来。
sql=f'delete from {table} where {id}'
try:
    cursor.execute(sql)
    conn.commit()
except:
    conn.rollback()
conn.close()
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 缓存 关系型数据库
MySQL的varchar水真的太深了——InnoDB记录存储结构
varchar(M) 能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。
832 6
MySQL的varchar水真的太深了——InnoDB记录存储结构
|
1月前
|
SQL 关系型数据库 MySQL
Python怎么操作Mysql数据库
Python怎么操作Mysql数据库
51 0
|
1月前
|
SQL 关系型数据库 MySQL
python如何操作mysql数据库
python如何操作mysql数据库
24 0
|
2月前
|
SQL 存储 算法
mysql常用指令操作
mysql常用指令操作
|
21天前
|
存储 SQL 关系型数据库
【MySQL】4. 表的操作
【MySQL】4. 表的操作
21 0
|
3月前
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
3月前
|
关系型数据库 MySQL
MySQL对小数进行四舍五入等操作
MySQL对小数进行四舍五入等操作
25 0
|
1月前
|
SQL 关系型数据库 MySQL
|
20天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
3月前
|
存储 关系型数据库 MySQL
Mysql 存储大数据量问题
Mysql 存储大数据量问题
92 1