Python3使用pymysql实现增删改查

推荐阅读: 带你学习PyMySQL , Mysql 与 Pymysqlhtml

原文连接python

原生语句操做

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

第三方库的安装
pip install pymysql
复制代码
建立数据库的连接

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

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()
复制代码
动态插入数据

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

好比说一开始的时候咱们有这样的一个表叫user,须要保存三个字段id,name,age而后咱们能够构建下面的字典和表名post

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()
复制代码

如今咱们就完成了插入操做,可是有的时候咱们须要 主键存在是更细,不存在时插入怎么办呢,首先咱们看下面语句fetch

动态更新插入数据
INSERT INTO user(id,name,age) VALUES(%s,%s,%s) ON DUPLICATE KEY UPDATE id=%s,name=%s,age=%s
ON DUPLICATE KEY UPDATE 
复制代码

能够达到如下目的:ui

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

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

不然插入一条新的记录。

而后咱们对上面总体作一个代码整理。以下

data_dic={'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()
复制代码
相关文章
相关标签/搜索