Python模块之操作数据库MySQL篇

2023-10-26

目录

一、安装PyMySQL模块

二、操作数据库

1、连接数据库

2、执行sql语句:execute和executemany

3、创建数据表:

三、操作MySQL数据表 

1、新增数据

2、查询数据

3、修改数据 

4、删除数据

5、踩到的坑:


一、安装PyMySQL模块

pip install PyMySQL

二、操作数据库

1、连接数据库

连接数据库函数:pymysql.connect()

获取游标:conn.cursor()

import pymysql
#连接数据库,参数1:主机名;参数2:用户名;参数3:用户密码;参数4:数据库名称
db=pymysql.connect('localhost','root','root','studyPython')
#创建游标
cur=db.cursor()
#查询版本
cur.execute('SELECT VERSION()')
#获取查询结果
data=cur.fetchone()
print('DataBase version:%s'%data)
#关闭连接
db.close()
#连接另一台电脑上的数据库
db=pymysql.connect(host="111.118.8.124",user="root",
                   password="111",port=3306)
#注意:
#1- host=ip地址,通过ipconfig查看ipv4获悉
#2- 被连接的数据库用户应设置 localhost=%

2、执行sql语句:execute和executemany

execute(query,args=None)

函数作用:执行单条的sql语句,执行成功后返回受影响的行数

参数说明:

query:要执行的sql语句,字符串类型

args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符

executemany(query,args=None)

函数作用:批量执行sql语句,比如批量插入数据,执行成功后返回受影响的行数

参数说明:

query:要执行的sql语句,字符串类型

args:嵌套的序列或映射,用于query的参数值

注意:
1.数据库性能瓶颈很大一部份就在于网络IO和磁盘IO,将多个sql语句放在一起,只执行一次IO,可以有效的提升数据库性能。推荐此方法

2.用executemany()方法一次性批量执行sql语句,固然很好,但是当数据一次传入过多到server端,可能造成server端的buffer溢出,也可能产生一些意想不到的麻烦。所以,合理、分批次使用executemany是个合理的办法

3、创建数据表:

SQL语句:

CREATE TABLE 表名(

字段名 字段属性

PRIMARY KEY (id) #设置主键

)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

在创建数据表前,先删除以防报错。删除数据表SQL语句:

DROP TABLE IF EXISTS 表名

import pymysql
#连接数据库
db=pymysql.connect('localhost','root','root','studyPython')
#创建游标
cur=db.cursor()
#执行SQL语句,如果表存在,则删除
cur.execute('DROP TABLE IF EXISTS 'books')
#定义创建表的SQL语句
sql="""
CREATE TABLE books(
    id int(8) NOT NULL AUTO_INCREMENT, #ID字段,属性整数类型8位,非空,自增加
    name varchar(50) NOT NULL, #NAME字段,属性字符串类型50位,非空
    categore varchar(50) NOT NULL,
    price decimal(10,2) DEFAULT NULL,
    publish_time date DEFAULT NULL,
    PRIMARY KEY (id) #主键id
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
"""
#执行SQL语句,创建数据表
cur.execute(sql)
#关闭数据库连接
db.closer()

三、操作MySQL数据表 

1、新增数据

可以使用excute()方法添加一条记录,也可以使用excutemany()方法批量添加多条记录。

SQL语句:

excutemany(operation,seq_of_params)

import pymysql
#连接数据库
db=pymysql.connect('localhost','root','root','studyPython',charset='utf8')
#创建游标
cur=db.cursor()

#数据是列表嵌套元组的形式
data=[('零基础学python','python','79.80','2018-5-20'),
        ('python入门到精通','python','69.80','2018-6-18'),
        ('php开发','php','79.80','2016/5/21'),
        ('零基础java','java','59.80','2017-5-21')]
try:
    #执行SQL语句,新增数据
    res=cur.executemany('insert into books(name,category,price,publish_time) values (%s,%s,%s,%s)',data) #返回执行行数
    #提交事务
    db.commit()
except:
    #发生错误时回滚
    db.rollback()
#关闭数据库连接
db.closer()

注意:批量插入多条sql语句采用的是executemany(sql,args)函数,返回受影响的行数。args参数是一个包含多个元组的列表,每个元组对应一条mysql中的一条数据。这里的%s不需要加引号,否则插入数据的数据会类型错误。

新增数据可以是列表嵌套列表,执行完sql语句后,要用conn.commit()提交,否则导入不进数据。

2、查询数据

使用execute()函数得到的只是受影响的行数,并不能真正拿到查询的内容。cursor对象还提供了3种提取数据的方法:fetchone、fetchmany、fetchall.。每个方法都会导致游标动,所以必须注意游标的位置。

cursor.fetchone():获取游标所在处的一行数据,返回元组,没有返回None

cursor.fetchmany(size):接受size行返回结果行。如果size大于返回的结果行的数量,则会返回cursor.arraysize条数据。

cursor. fetchall():接收全部的返回结果行。

import pymysql

#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

cur.execute("select * from user;")

#fetchone()
while 1:
    res1=cur.fetchone()
    if res is None:
        #表示已经取完结果集
        break
    print (res1)

#fetchall()取所有数据
resTuple=cur.fetchall()
for res in resTuple:
    print(res)
print(type(resTuple))
print (‘共%d条数据’%len(resTuple))

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

3、修改数据 

'''更新多条数据'''
import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

#更新前查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
print('更新前的数据为:')
for res in cur.fetchall():
      print (res)

print ('*'*40)      
#更新2条数据
sql="update user set age=%s where name=%s"
update=cur.executemany(sql,[(15,'kongsh'),(18,'wen')])

#更新2条数据后查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
print('更新后的数据为:')
for res in cur.fetchall():
      print (res)


cur.close()
conn.commit()
conn.close()
print('sql执行成功')

4、删除数据

'''删除多条数据'''
import pymysql
#打开数据库连接
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()

print ('*'*40)      
#删除2条数据
sql="delete from user where id=%s"
cur.executemany(sql,[(3),(4)])

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

5、踩到的坑:

sql语句中,字符要用双引号。

cur.executemany(sql, data) # data可以是列表嵌套列表,要提交事务conn.commit()才能插入数据 

单引号用tab键上方的`代替。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python模块之操作数据库MySQL篇 的相关文章

  • REACT NATIVE 从本地 MySQL 数据库检索数据

    我正在用 React Native 编写一个应用程序 并且创建了一个 MySQL 数据库来存储我的信息 但我想知道是否可以使用 axios 或 fetch 与我的数据库交互 因为它是本地的并且没有 HTTP 地址然而 我觉得我以前能够做到这
  • SSL 连接在 MySQL Workbench 中有效,但在 DBeaver 中无效

    为当今读者编辑 这是旧版本 DBeaver 中的一个错误 随后已修复 我尝试在 DBeaver 中使用 SSL 连接到 Google Cloud SQL MySQL 实例时遇到 访问被拒绝 错误 我能够 在 MySQL Workbench
  • 在 Tensorflow 2.0 中的 tf.function input_signature 中使用字典

    我正在使用 Tensorflow 2 0 并面临以下情况 tf function def my fn items do stuff return 如果 items 是张量的字典 例如 item1 tf zeros 1 1 item2 tf
  • 当数据帧预排序时 pandas.groupby.nsmallest 会丢弃多索引

    我正在使用 pandas 0 22 0 python 版本 3 6 4 groupby与 nsmallest方法查找数据帧每组中的最小项目 这是一个示例数据框 gt gt gt import pandas as pd gt gt gt df
  • 将 Django 模型映射到外部 API

    上下文 我有一个外部 API 提供数据并允许发布新数据或修补现有数据 API 响应示例 response requests get http api band 4 print response json id 4 name The Beat
  • MySQL 不将 ı 视为 i?

    我在 MySQL 5 7 27 中有一个用户表utf8mb4 unicode ci整理 不幸的是 没有像 i 那样进行线程化 以下查询将找不到Y lmaz select id from users where name Yilmaz 我对其
  • 使用 pandas 插值将每月值转换为每日值

    我有 1000 列的 12 个平均每月值 我想使用 pandas 将数据转换为每日数据 我尝试过使用插但我得到了从 31 01 1991 到 31 12 1991 的每日值 这并不涵盖全年 一月份的值没有得到 我用了日期范围用于我的数据框的
  • 在散景中隐藏轴

    如何在散景图中隐藏 x 轴和 y 轴 我已经根据此进行了检查和尝试 p1 figure visible None p1 select type Axis visible 0 xaxis Axis plot p1 visible 0 和喜欢h
  • mysql 密码 使用 PHP 连接到 MySQL

    在使用 PHP 连接到 MySQL 的教程中 您会看到类似于以下内容的内容 pdo new PDO mysql host localhost dbname mydb myuser mypassword 我在本地主机上有一个以这种方式工作的连
  • 如何在 Flask-SQLAlchemy 中通过 id 删除记录

    I have users我的 MySql 数据库中的表 这张表有id name and age fields 我怎样才能删除一些记录id 现在我使用以下代码 user User query get id db session delete
  • 获取小部件的背景颜色 - 真的

    我无法获取小部件的实际背景颜色 在我的特殊情况下 我在使用 QTabWidget 中的小部件时遇到问题 这是在Windows7上 因此 经典的小部件有一些灰色背景 而选项卡内的小部件通常用白色背景绘制 I tried def bgcolor
  • python seaborn:按色调显示 alpha

    在seaborn中 色调为组设置不同的颜色 我可以设置吗alpha取决于组中的JointGrid 或者甚至在单个数据点上 sns set theme jg sns JointGrid data df sns x x y y hue hue
  • 从Python中的URL中提取域[重复]

    这个问题在这里已经有答案了 我有一个像这样的网址 http abc hostname com somethings anything 我想得到 hostname com 我可以使用什么模块来完成此任务 我想在python2中使用相同的模块和
  • Python:定义多个相同类型的变量?

    可能是重复的 但至少我无法通过搜索这些术语找到答案 在Python中有没有更快的方法来做到这一点 level1 level2 level3 我试过了 level1 level2 level3 但这似乎创建了该对象的副本 这不是我想要的 和
  • 警告:mysqli_stmt::bind_param():变量数量与准备好的语句中的参数数量不匹配[重复]

    这个问题在这里已经有答案了 我收到以下错误 Warning mysqli stmt bind param Number of variables doesn t match number of parameters in prepared
  • 在 Django 查询中与父级一起获取子级数据

    我有两个模型产品和产品包 产品包有一个产品型号的外键 我如何访问包含产品包的所有产品的列表 class Product models Model title models CharField verbose name Product Tit
  • 按权重分组

    给定以下数据框 import pandas as pd d pd DataFrame Age 18 20 20 56 56 Race A A A B B Response 3 2 5 6 2 Weight 0 5 0 5 0 5 1 2 1
  • 在 Pandas 中按索引分组

    如何使用 groupby by 索引 1 2 3 它们的顺序相同 并获得属于每个索引范围的列分数的总和 基本上我有这个 index score 1 2 2 2 3 2 1 3 2 3 3 3 我想要的是 index score sum 1
  • AttributeError:“MainRouter”对象没有属性“_disabled_count”

    我正在创建一个 kivy 应用程序 其中我使用了显示此错误的路由器 AttributeError MainRouter 对象没有属性 disabled count 有什么解决办法吗 我也得到了这个 但使用 super 修复了它 使用以下命令
  • Pandas DataFrame 中多列的映射方法

    我有一个 Pandas 数据框 其中的值是列表 import pandas as pd DF pd DataFrame X 1 5 1 2 Y 1 2 5 1 3 5 DF X Y 0 1 5 1 2 5 1 1 2 1 3 5 我想检查

随机推荐

  • Cordova 环境搭建+打包Android APK

    一 环境搭建 1 JDK 1 1 下载JDK http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 在上面的网址中选择符合自己操作
  • 正则表达式匹配案例

    匹配案例 1 判断变量的名称 由数字 字母 下划线组成 不能以数字作为开头 a zA Z a zA Z0 9 注意 如果不加 中间如果有不符合字符如abc 123就会匹配成功 import re result re match r a zA
  • 《ReactNative系列讲义》进阶篇---06.FlatList(三)

    版权声明 本文为博主原创文章 未经博主允许不得转载 一 简介 截止到上篇文章 关于FlatList无论是简单的还是高级的属性用法都已经介绍完毕 今天我们一起来看看FlatList更高级的玩法 相关方法的调用 二 基础知识 获取FlatLis
  • Elasticsearch的关键词搜索

    返回给前端的实体类 Data AllArgsConstructor NoArgsConstructor public class PageResult private Long total private List
  • el-table纵向垂直表头

    参考 https www jianshu com p 1f38eaffd070
  • facenet采坑之旅,主要记录一些用facenet过程中遇到的大大小小的问题

    问题1 Unable to run align dataset mtcnn py getting an attribute error module facenet has no attribute store revision info
  • 封装一个带el-form的,带el-table的,带分页的,带搜索查询的dialog组件,很使用的二次封装组件。

    封装dialog小案例 提示 这是我工作中封装的代码 很使用 需要的可以拿去 在我们的代码中往往会出现点击按钮出现弹窗进行操作 那么我们就需要对dialog进行一个二次封装 下边是大概的一个样式 对组件进行二次封装
  • burpsuite与sqlmap结合使用之CO2

    在使用sqlmap时 对一个页面进行注入时需要认证信息 如果将页面信息每次都保存到本地比较麻烦 使用命令行指令也需要cookie值 burpsuite中有一个快速sqlmap扫描的工具 CO2是一个burp插件 burp将拦截的请求直接发给
  • C++设计模式之适配器模式(adapter)(结构型)

    一 结构型模式概述 结构型模式 Structural Pattern 描述如何将类或者对象结合在一起形成更大的结构 就像搭积木 可以通过简单积木的组合形成复杂的 功能更为强大的结构 结构型模式可以分为类结构型模式和对象结构型模式 类结构型模
  • 低通,高通,带通,带阻滤波器的定义

    1 低通 Low pass filter 是容许低于截止频率的信号通过 但高于截止频率的信号不能通过的电子滤波装置 2 高通 是一种让某一频率以上的信号分量通过 而对该频率以下的信号分量大大抑制的电容 电感与电阻等器件的组合装置 其特性在时
  • 个人域名备案有什么要求?需要准备什么?

    现在域名是非常火爆的 越来越多的人开始注册域名 有个人域名 有企业域名 域名都是需要备案的 很多人不知道个人域名备案有哪些要求 需要准备些什么 下面我们一起来看看 个人域名备案的要求 1 国内主机都要求备案 2 网站访问者大多是国内人时国内
  • JDK的下载及配置JAVE_HOME

    初学JAVA的很多朋友的第一步就是下载JDK 首先 我来解释一下什么是JDK JDK是JAVA语言的软件开发工具包 目前已经到了JDK9的版本 在此提醒各位初学的朋友 下载JDK的话下载JDK8就够了 因为JDK9版本还不稳定 JDK就已经
  • 原生ajax 设置get请求参数和请求头信息和发送 post请求

    get请求发送参数直接在路径后面加问号即可 xhr open GET http 127 0 0 1 8000 server a 100 b 50 设置请求头信息 1 请求头中本来就有这个属性 只是修改该属性的值 xhr setRequest
  • ElasticSearch 查询语法

    环境 ElasticSearch6 4 2 以下查询请求方式均为Post 索引名 book 索引结构 mappings novel properties word count type interger author type keywor
  • Vue基础之指令与过滤器

    vue 简介 1 什么是 vue 官方给出的概念 Vue 读音 vju 类似于 view 是一套用于构建用户界面的前端框架 2 vue 的特性 vue 框架的特性 主要体现在如下两方面 数据驱动视图 双向数据绑定 2 1 数据驱动视图 在使
  • unity第一人称射击游戏,枪击游戏,功能完整可以当大作业或者毕设

    unity第一人称射击游戏 枪击游戏 含源码和exe导出文件 下载链接在文末 unity第一人称枪击游戏 分为海岛地图和沙漠地图 可以开镜射击 敌人可以移动 菜单页面有开始游戏 游戏说明 退出三个按钮 游戏有音效 可以通过ASDW移动人物
  • 查看jks证书内容

    keytool list v keystore xxx jks 输入密钥库口令
  • C++进阶必读书籍

    结合一些我的学习经历 希望对于想学C 的人有些帮助 大家有什么好想法望提出 我老师最初是从C语言教起的 用的是潭浩强的 lt
  • ajax day3

    3 将普通对象转为查询参数字符串形式 创建URLSearchParams参数 再用toString方法转为字符串 4 xhr对象 请求参数 body参数 5 promise promise对象一旦被兑现或拒绝 就是已敲定了 状态无法再被改变
  • Python模块之操作数据库MySQL篇

    目录 一 安装PyMySQL模块 二 操作数据库 1 连接数据库 2 执行sql语句 execute和executemany 3 创建数据表 三 操作MySQL数据表 1 新增数据 2 查询数据 3 修改数据 4 删除数据 5 踩到的坑 一