[Python]mysql-connector

        今天测试工作要将30w数据量的数据放入到表中,前端中因为有限制,一次只能插入1000条。我第一反应居然是用Selenium来搭一个脚本去通过前端傻傻的输入...

        后来被点醒了...因为我们是知道数据库的地址已经拥有账号密码的,可以直接通过一些数据库的驱动来直接通过sql语句来插入...(真的被自己蠢到了

        因为之前写项目用的java(JDBC)比较多,python这边也是第一次接触,就来学习啦。

        其实这些数据库驱动器,步骤都比较统一,连接,写SQL,驱动执行SQL,拿数据/写数据

安装

pip install mysql-connector-python

连接数据库

import mysql.connectorconn = mysql.connector.connect(user='root',  # 用户名password='',  # 密码host='localhost',  # 目标数据库主机地址auth_plugin='mysql_native_password'  # 为了兼容其他版本数据库的属性设置
)
print(conn)
conn.close()  # 关闭连接

我一开始用的是mysql-connector,但报错了

plugin 'caching_sha2_password' is not supported

然后改用mysql-conncetor-python后,再设置了“auth_plugin='mysql_native_password'就OK咯

如果连接成功了,就会返回一个连接数据库的信息

<mysql.connector.connection_cext.CMySQLConnection object at 0x000002085B314A50>

失败了,就报对应错误了。

游标cursor

        在使用mysql-connector当中一定会接触到一个概念:游标。

        一句话解决:

游标是一个方便操作数据库的接口对象

提供了,execute方法去执行sql语句,commit方法去提交事务,rollback方法回滚事务。以及有fetchone和fetchall方法去读取sql语句查询的结果。

DDL 

创建数据库

import mysql.connectorconn = mysql.connector.connect(user='root',  # 用户名password='',  # 密码host='localhost',  # 目标数据库主机地址auth_plugin='mysql_native_password'  # 为了兼容其他版本数据库的属性设置
)
print(conn)
# 创建一个游标
cursor = conn.cursor()
# 创建数据库sql语句
sql = 'create database testDatabase'
cursor.execute(sql)  # 执行sql语句cursor.close()  # 关闭游标
conn.close()  # 关闭连接

创建表

        简单一点就先选中目标数据库,再去执行对应的sql。

import mysql.connectorconn = mysql.connector.connect(user='root',  # 用户名password='',  # 密码host='localhost',  # 目标数据库主机地址auth_plugin='mysql_native_password',  # 为了兼容其他版本数据库的属性设置database='testDatabase'  # 选中数据库
)
print(conn)
# 创建一个游标
cursor = conn.cursor()
# 创建数据库sql语句
sql = 'create table test(id int, name varchar(20), sex varchar(10))'
cursor.execute(sql)  # 执行sql语句cursor.close()  # 关闭游标
conn.close()  # 关闭连接

        或者是可以先判断库存不存在,让游标去执行use database的操作。如果库不存在就先创建出来。 

DML

可以用游标当中的rowCount方法去读取select中查询的到的行数或者是DML语句中受影响的行数

DELETE

Insert

需要占位符和对应插入的字段数量对应上,使用%s进行占位

数据单条插入

conn = mysql.connector.connect(user='root',  # 用户名password='',  # 密码host='localhost',  # 目标数据库主机地址auth_plugin='mysql_native_password',  # 为了兼容其他版本数据库的属性设置database='testDatabase'  # 选中数据库)myCursor = conn.cursor()  # 创建游标# 尝试插入的sql语句sql = "insert into data(provider, advertiser, status, creator, deleted) values(%s, %s, %s, %s, %s)"# 编辑的插入value的元组data = ("8197", "Test000", "0", "8197", "0")try:myCursor.execute(sql, data)  # 单条sql插入conn.commit()print("插入成功")except mysql.connector.Error as err:print(err)

数据批量插入

executemany() 

conn = mysql.connector.connect(  # 创建连接user='root',  # 用户名password='',  # 密码host='localhost',  # 目标数据库主机地址auth_plugin='mysql_native_password',  # 为了兼容其他版本数据库的属性设置database='testDatabase'  # 选中数据库)myCursor = conn.cursor()  # 创建游标# 尝试插入的sql语句sql = "insert into data_log(id, type, field_name, old_field, new_field, updater, update_time) values(%s, %s, %s, %s, %s, %s, %s)"datas = []  # 存储sql字段对应value元组的列表count = 1  # 单次批量插入的计数for num in range(500):  # 共插入500条if count == 10:  # 单次插入10条,如果满足了,就尝试插入try:myCursor.executemany(sql, datas)  # 使用批量插入语句conn.commit()  # 数据更新了,commit一下print(datas)print("插入10条数据成功")except mysql.connector.Error as err:  # 如果插入不成功的话,就打印错误信息print(err)count = 1  # 单次10条数据插入成功了,计数重置datas = []  # 缓存清空else:count += 1data = ('150', '3', '附件', '', '', '8197', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))  # 编辑插入数据的元组datas.append(data)

Update

    # 连接conn = mysql.connector.connect(user='root',  # 用户名password='',  # 密码host='localhost',  # 目标数据库主机地址auth_plugin='mysql_native_password',  # 为了兼容其他版本数据库的属性设置database='testDatabase'  # 选中数据库)# 创建游标myCursor = conn.cursor()# 创建要执行的sql语句,sql = "update comment set content = %s where id = %s"value = ("修改成功", '1')try:myCursor.execute(sql, value)conn.commit()print(myCursor.rowcount, "条数据,update成功")except mysql.connector.Error as err:print(err)

Delete

    # 创建游标myCursor = conn.cursor()# 创建要执行的sql语句,sql = "delete from test where id = 1"try:myCursor.execute(sql, value)conn.commit()print(myCursor.rowcount, "条数据,delete成功")except mysql.connector.Error as err:print(err)

DQL

fetchall是将游标中缓存的数据全部读取处理,fetchone是将游标中的数据按默认排序读取第一条

Select

myCursor = conn.cursor()  # 创建游标sql = "select * from clue_comment where clue_type = 1"try:myCursor.execute(sql)result = myCursor.fetchall()# fetchall将select到的数据全部从游标中读出来 读完之后游标里就没有数据了for row_data in result:print(row_data)# 此时再使用fetchone读取,读到的是Noneone_data = myCursor.fetchone()print(one_data)except mysql.connector.Error as err:print(err)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨境电商独立站:Shopify/Wordpress/店匠选哪个?

在面对不断增加的平台运营压力时&#xff0c;不少跨境电商的商家逐渐将注意力转向建立自己的独立站。据《中国跨境出口电商发展报告&#xff08;2022&#xff09;》所示&#xff0c;中国拥有的独立站数量在2022年已接近20万个&#xff0c;这表明独立站已成为卖家拓展海外市场的…

强化学习学习(一)从MDP到Actor-critic演员-评论家算法

文章目录 From Markov chains to Markov decision process (MDP):partially observed Markov decision peocess Value FunctionsQ-functionvalue functionUsing Q π Q^\pi Qπ and V π V^\pi Vπ Types of RL algorithmsExamples of algorithms Policy gradient大量有趣的数…

Git 删除 远端的分支

要删除 Git 远端的分支&#xff08;例如&#xff1a; V3.2.1.13&#xff09;&#xff1a; 可以执行以下命令 git push origin --delete V3.2.1.13这条命令会向远端的仓库删除名为 V3.2.1.13 的分支。如果这个分支只在远端仓库存在而没有对应的本地分支&#xff0c;那么删除后这…

http、https、websocket

概念解析 HTTP&#xff08;超文本传输协议&#xff09;是一种无状态的请求/响应协议&#xff0c;通常用于客户端&#xff08;如Web浏览器&#xff09;和服务器之间的通信。客户端发送一个请求到服务器&#xff0c;然后服务器返回一个响应。HTTPS是HTTP的安全版本&#xff0c;它…

使用 Hive 聚合函数进行多行合并

各类学习教程下载合集 ​​https://pan.quark.cn/s/874c74e8040e​​ 在大数据处理中&#xff0c;Hive 是一个常用的数仓工具。它提供了丰富的聚合函数&#xff0c;可以帮助我们对数据进行各种聚合操作。本文将介绍如何使用 Hive 的聚合函数进行多行合并&#xff0c;并提供详…

均匀圆形阵列原理及MATLAB仿真

均匀圆形阵列原理及MATLAB仿真 目录 前言 一、均匀圆阵原理 二、圆心不存在阵元方向图仿真 三、圆心存在阵元方向图仿真 四、MATLAB仿真代码 总结 前言 本文详细推导了均匀圆形阵列的方向图函数&#xff0c;对圆心不放置阵元和圆心放置阵元的均匀圆形阵列方向图都进行了仿…

MySQL-视图、存储过程和触发器

一、视图的定义和使用 视图是从一个或者几个基本表&#xff08;或视图&#xff09;导出的表。它与基本表不同&#xff0c;是一个虚表,视图只能用来查询。不能做增删改查(虚拟的表) 1.视图的作用 简化查询重写格式化数据频繁访问数据库过滤数据 2.创建视图 -- 创建视图 -- 语法…

【MATLAB APP】建立独立桌面APP

背景&#xff1a;已有MATLAB APP的.mlapp文件&#xff0c;但客户提出需要可以直接使用的exe文件。 要求&#xff1a;点开即用&#xff0c;无需下载MATLAB。使用者无法修改APP的代码。 一、环境配置 APP创建者&#xff1a;安装MATLAB R2023a&#xff0c;配置Application Compile…

学习Vue2收藏这一篇就够了(如何创建Vue实例)

什么是Vue? Vue是什么:是一个用于构建用户界面的渐进式框架 什么是构建用户界面:基于数据动态渲染页面 什么是渐进式:循序渐进的学习 什么是框架:一整套完整的项目解决方案 创建Vue实例 核心步骤(4步): 准备容器 引包(官网) — 开发版本/生产版本 创建Vue实例 …

【git】切换到远程其他分支

切换到远程其他分支 当前在master分支&#xff0c;切换develop&#xff1a; $ git branch -rorigin/HEAD -> origin/masterorigin/developorigin/mastergit switch 正常多了&#xff1a; $ git switch -c develop --track origin/develop Updating files: 100% (4664/466…

创建vue3项目,以及使用示例

1.在根目录下cmd&#xff1a;vue create myobj&#xff08;没有切换淘宝镜像记得切换&#xff0c;这样创建项目运行快&#xff09; 2. 3.(按空格键选中&#xff0c;选好回撤就到下一步了) 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.然后输入执行以下两步就已经运行项目了 以…

Linux云计算 |【第二阶段】AUTOMATION-DAY4

主要内容&#xff1a; 部署Ansible、Ansible基础命令&#xff08;Ansible ad-hoc命令格式、Ansible-doc帮助&#xff09;、Ansible模块常用&#xff1a;脚本与命令模块、文件与账户模块、软件与服务模块、逻辑卷模块 补充&#xff1a;touch 除创建文件外&#xff0c;若再创建相…

vue3知识

目录 基础vue开发前的准备vue项目目录结构模板语法属性绑定条件渲染列表渲染通过key管理状态事件处理事件传参事件修饰符数组变化侦测计算属性Class绑定style绑定侦听器表单输入绑定模板引用组件组成组件嵌套关系组件注册方式组件传递数据Props(父传子)组件传递多种数据类型组件…

SpringBoot 数据访问操作

目录 一.SpringBoot整合Mybatis与Mybatis-Plus 二.SpringBoot切换druid数据源 3.1DRUID配置参数 3.2Druid监控平台 一.SpringBoot整合Mybatis与Mybatis-Plus 步骤&#xff1a; 1.坐标 <dependency><groupId>com.baomidou</groupId><artifactId>myb…

React系列面试题

大家好&#xff0c;我是有用就点赞&#xff0c;有用就扩散。 1.React的组件间通信都有哪些形式&#xff1f; 父传子&#xff1a;在React中&#xff0c;父组件调用子组件时可以将要传递给子组件的数据添加在子组件的属性中&#xff0c;在子组件中通过props属性进行接收。这个就…

AI伦理困境与隐私保护策略:透明、公平与安全的未来

AI伦理与隐私保护&#xff1a;如何应对挑战并建立治理框架 概述&#xff1a; 随着人工智能的普及&#xff0c;AI伦理和隐私保护问题日益受到关注。本文深入探讨如何在推动AI技术发展的同时&#xff0c;确保透明度、公平性和个人隐私权不受侵犯&#xff0c;为构建负责任的AI未来…

Android ConstraintLayout 约束布局

目录 1&#xff09;ConstraintLayout 约束布局是什么&#xff1f;为什么使用&#xff1f; 2&#xff09;如何使用 3&#xff09;可见性改变后的行为处理 4&#xff09;图形化界面的一些工具介绍 5&#xff09;Chains ( 链 ) 一、ConstraintLayout 约束布局是什么 Constraint…

【无人机】测绘行业新时代

【无人机】测绘行业新时代 无人机测绘主要指的是依托无人机系统为主要的信息接收平台&#xff0c;通过无人机机载遥感信息采集和处理设备&#xff0c;将最终所获取的遥感信息传输到测绘中心&#xff0c;经过数据技术处理&#xff0c;形成立体化的数字模型&#xff0c;以满足行…

JavaScript 输出

JavaScript 不提供任何内建的打印或显示函数。 JavaScript 显示方案 JavaScript 能够以不同方式“显示”数据&#xff1a; 使用 window.alert() 写入警告框使用 document.write() 写入 HTML 输出使用 innerHTML 写入 HTML 元素使用 console.log() 写入浏览器控制台 使用 in…

想要连接稳定的远程控软件吗?这4款软件不要错过

远程控制电脑是一种现代社会高效便捷的办公方式。这种方式可以不论时间不论地点都可以调用到办公电脑里的文件&#xff0c;如果你办公也有这个需求&#xff0c;那就看看我介绍的工具吧。 1.RL远程控制 直通车>>https://www.raylink.live 这个软件非常适合用来进行手机…