4.4 MySQL存储

目录

1、使用前提

2、使用连接数据库最初步骤

2.1 最初步骤

2.2 connect()方法中参数简单传递

3、创建数据库(创建架构)和创建表

3.1 创建数据库(创建架构)

3.2 创建表

3.2.1 基本创建

3.2.2 创建自增主键

4、Pycharm 可视化连接 MySQL 图形界面

5、插入、更新、查询、删除数据

5.1 插入数据

5.2 、更新数据

5.3、查询数据

5.4、删除数据

6. MySQL存储字典

1、使用前提

        安装MySQL数据库,安装pymysql第三方库。

2、使用连接数据库最初步骤

2.1 最初步骤

(1) 声明一个连接对象。使用connect()方法声明一个连接对象conn,参数为数据库的一些信息。依次为主机名、用户名、密码、端口号;

(2) 获得游标。使用cursor()方法获得游标;

(3) 执行 sql 语句。使用execute()方法;

(4)关闭游标;

(5) 关闭连接。

以下代码对数据库进行了连接,执行语句,得到版本。

import pymysql# (1) 声明一个连接对象
conn = pymysql.connect(host='localhost', user='root', passwd='1141477238', port=3306)   # (2) 建立游标
cursor = conn.cursor()# (3) 执行语句        
sql = "SELECT VERSION()"
cursor.execute(sql)data = cursor.fetchone()    # fetchone()得到第一条数据
print('DataBase version:', data)cursor.close()            # (4) 关闭游标
conn.close()                # (5) 关闭连接# 输出:DataBase version: ('8.3.0',)

2.2 connect()方法中参数简单传递

        在上面可以看到connect()方法中参数很多,若要多次连接,每次一个个写或者复制比较繁琐,所以下面采取更方便的传递方法。

        建立一个新python文件mysql_info.py,将其中参数设置为字典,如下:

mysql_local = {'host': 'localhost','user': 'root','passwd': '1141477238','port': 3306,
}

        在主要文件中使用如下:

from mysql_info import mysql_local#.......
conn = pymysql.connect(**mysql_local)
#.......

        **mysql_local会将mysql_local字典中的键值对展开,作为关键字参数传递给pymysql.connect函数。

3、创建数据库(创建架构)和创建表

3.1 创建数据库(创建架构)

# 使用语句create database 数据库名
# 默认编码方式urf-8
sql = "create database spider default character set utf8mb4"

3.2 创建表

3.2.1 基本创建

        使用CREATE TABLE 表名(表头),此处为id,name,age。

import pymysqlconn = pymysql.connect(host='localhost', user='root',passwd='1141477238', port=3306, db='spider')
cursor = conn.cursor()
sql = ('CREATE TABLE IF NOT EXISTS student(id VARCHAR(255) NOT NULL, ''name VARCHAR(255) NOT NULL, ''age INT NOT NULL, ''PRIMARY KEY (id))')
cursor.execute(sql)
cursor.close()
conn.close()

        IF NOT EXISTS表明如果没有此表则创建该表,有则不会再创建表,即使改动后面的name、age等再执行一次,也不会有变化。若没有IF NOT EXISTS 在初始创建后再执行了一次该程序后再执行会报错,即存在表再创建会报错。

        NOT NULL表明不允许该键为空,否则报错。

3.2.2 创建自增主键

        该内容不与下方联系。

    sql = ('CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, ''username VARCHAR(50),''email VARCHAR(100))')

         该主键id会随着数据的增多而自增,再 insert 语句中不需要自己添加。(主键是用来唯一标识每一条记录的,如果没有主键或者主键值为空,就无法唯一标识记录,会容易导致插入失败。)

def insert_movie():conn = pymysql.connect(**mysql_local)cursor = conn.cursor()username = 'hhhhh'email = '1111111'sql = f'INSERT INTO users (username, email) VALUES (%s, %s)'cursor.execute(sql, (username, email))conn.commit()conn.close()

        结果如下(第一条为最先插入的,现插入第二条):

4、Pycharm 可视化连接 MySQL 图形界面

        在执行代码后观察。具体见链接http://t.csdnimg.cn/ZYZoQ

        根据上述代码,我们可以看到我们的数据库spider,点击表student,发现如下图所示:

        即建表成功,可以开始之后的操作。

5、插入、更新、查询、删除数据

5.1 插入数据

        使用insert into 表名(表头元素) values (%s, %s, %s),之后execute()中传入参数,再比最初步骤多了一个连接提交conn.commit()即可。

        为了避免插入失败导致报错崩溃程序,加一层异常处理。若插入失败,则执行conn.rollback(),会发生数据回滚,相当于没插入这条数据。之后执行后面的程序。

import mysql# 插入数据
conn = pymysql.connect(host='localhost', user='root',passwd='1141477238', port=3306, db='spider')
cursor = conn.cursor()
id = '10001'
name = 'John'
age = 20
sql = 'insert into student(id, name, age) values (%s, %s, %s)'
try:cursor.execute(sql, (id, name, age))conn.commit()
except:conn.rollback()print("插入失败")
cursor.close()
conn.close()

5.2 、更新数据

        使用update 表明 set 要改变量名 = %s where id = %s(id为定位变量)

# 改id为10001的age
sql = 'update student set age = %s where id = %s'
cursor.execute(sql, (25, '10001'))

5.3、查询数据

        使用select * from 表名 where 条件"。执行后结果返回再游标对象里,使用fetchall()方法返回所有符合条件的结果。

初表:

# 查询数据
conn = pymysql.connect(host='localhost', user='root',passwd='1141477238', port=3306, db='spider')
cursor = conn.cursor()
sql = "select * from student where age >= 25"
cursor.execute(sql)
result = cursor.fetchall()
print(result)

执行代码结果:

5.4、删除数据

        改变 sql 语句即可,使用delete from 表名 where 条件即可

import mysqlconn = pymysql.connect(host='localhost', user='root',passwd='1141477238', port=3306, db='spider')
cursor = conn.cursor()
sql = "delete from student where age >= 25 "
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()

6. MySQL存储字典

        在上述发现表格数据id,name,age等要一个个写入比较麻烦,所以接下来介绍一个以字典的方式把数据存入MySQL。

        主要是将字典的键值拆开,分别合并为字符串,去对应 sql 语句中的内容,之后将excute()方法中的第二个参数设置为元组即可。

import pymysql
from mysql_info import mysql_local    # 插入数据此文件中要加入'db': '数据库名'data = {'id': '10005','name': 'HaLun','age': 26
}
table_name = 'student'
conn = pymysql.connect(**mysql_local)
cursor = conn.cursor()keys = ','.join(data.keys())    
s_value = ','.join(['%s'] * len(data))sql = f"INSERT INTO {table_name}({keys}) VALUES ({s_value})"
print(sql)    # 输出:INSERT INTO student(id,name,age) VALUES (%s,%s,%s)
print(tuple(data.values()))    # 输出:('10005', 'HaLun', 26)cursor.execute(sql, tuple(data.values()))
conn.commit()
cursor.close()
conn.close()

本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!

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

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

相关文章

【蓝桥杯】青蛙跳杯子(BFS)

一.题目描述 二.输入描述 输入为 2 行,2 个串,表示初始局面和目标局面。我们约定,输入的串的长度不超过 15。 三.输出描述 输出要求为一个整数,表示至少需要多少步的青蛙跳。 四.问题分析 注意:空杯子只有一个 …

3种SQL语句优化方法,测试人必知必会!

关于SQL语句的优化,本质上就是尽量降低SQL语句的执行时间,对于如何降低SQL语句的执行时间,可以从以下几个方面入手。 一、降低SQL语句执行时的资源消耗 这是我们在数据库性能调优中常用的方法,该方法以分析SQL语句的执行计划为切…

Qt程序设计-报警灯自定义控件实例

本文讲解Qt报警灯自定义控件实例。 实现功能 设置边框和内部颜色。 设置是否闪烁点亮。 添加的报警灯类 #ifndef LIGHT_H #define LIGHT_H#include <QWidget> #include <QDebug> #include <QPainter> #include <QTimer>class Light : public QWid…

Python实用技巧:处理JSON文件写入换行问题

Python实用技巧&#xff1a;处理JSON文件写入换行问题 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅…

linux中将普通用户添加sudo权限

1.登录root权限账号&#xff0c;编辑/etc/sudoers文件 2.找到"root ALL(ALL) ALL"&#xff0c;并在下面添加普通用户 格式&#xff1a;username ALL(ALL) ALL vim /etc/sudoers ## Next comes the main part: which users can run what software …

理解大数据处理过程中的小文件问题

相信很多开发都知道这个问题&#xff0c;看文章&#xff0c;看博客都有了解过。但是如果让你自己讲&#xff0c;能不能从头到尾讲明白原理和对应的解决方案呢&#xff1f; 这个小文件是怎么产生的&#xff1f;就一句话&#xff0c;spark处理完数据输出时&#xff0c;一个分区一…

CMake和VsCode调试的使用

目录 CMake使用 CMake下载 创建系统文件目录 MakeList编写规范 VsCode启动调试 添加配置文件 添加断点&#xff0c;启动调试 CMake使用 CMake下载 输入指令 sudo apt install cmake 安装cmake&#xff0c;使用 cmake -version可查看cmake的版本信息 创建系统文件目…

土耳其商务团一行莅临优积科技考察交流

7月31日土耳其商务代表Emre Arif Parlak等一行三人莅临优积科技考察交流&#xff0c;公司CEO刘其东携团队成员热情接待并深入交流。 商务团首先参观了我司产品生产基地&#xff0c;详细了解了钢结构模块的生产加工工艺流程和质量控制体系。随后参观了我司模块化学校样板房、模块…

Python-语句

一、if语句 格式 if 条件&#xff1a; 条件成立执行的代码 if True:print(条件成立执行的代码) print(这个代码执行吗?)上述代码两个print均执行 if False:print(条件成立执行的代码) print(这个代码执行吗&#xff1f;)只执行第二个print 2.总结 对于未缩进的代码&#x…

Git+py+ipynb Usage

0.default config ssh-keygen -t rsa #之后一路回车,当前目录.ssh/下产生公私钥 cat ~/.ssh/id_rsa.pub #复制公钥到账号 git config --global user.email account_email git config --global user.name account_namebug of ipynb TqdmWarning: IProgress not found. Please …

Springboot日常总结-@RestController和@Controller的区别

RestController和 Controlle是两种不同的控制器实现&#xff0c;它们的主要区别在于如何处理返回的数据和是否支持跳转到视图页面。 Controller 是一个基本的控制器注解&#xff0c;它允许你将一个类标记为一个Spring MVC控制器处理器。使用 Controller 的类中的方法可以直接返…

c++学习记录 string容器—字符串比较

比较方式&#xff1a; 字符串比较是按照字符的ASCII码进行对比 返回 0> 返回 1< 返回 -1 函数原型&#xff1a; int compare(const string& s) const; //与字符串s比较int compare(const char* s) const; //与字符串s比较 #include<iostream> using name…

一文1400字使用Jmeter进行http接口测试【建议收藏】

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 一、开发接口…

【JavaSE】集合框架

目录 程序场景分析 Java集合框架包含的内容List接口ArrayListLinkedListList接口的常用方法ArrayList案例背景分析代码示例扩展以下功能代码示例 LinkedList案例背景分析代码示例LinkedList的特殊方法 ArrayList与LinkedList对比 Set接口HashSet 集合的特点常用方法案例背景分析…

[c 语言] 大端,小端;网络序,主机序

在网络编程中&#xff0c;特别是底层网卡驱动开发时&#xff0c;常常遇到字节序问题。字节序指的是多字节数据类型在内存中存放的顺序&#xff0c;高位保存在低地址还是高地址&#xff0c;以此来划分大端还是小端。 1 大端和小端 大端和小端指的是 cpu 的属性&#xff0c;常见…

Vulhub 靶场训练 DC-9解析

一、搭建环境 kali的IP地址是&#xff1a;192.168.200.14 DC-9的IP地址暂时未知 二、信息收集 1、探索同网段下存活的主机 arp-scan -l #2、探索开放的端口 开启端口有&#xff1a;80和22端口 3、目录扫描 访问80 端口显示的主页面 分别点击其他几个页面 可以看到是用户…

SpringBoot源码解读与原理分析(三十四)SpringBoot整合JDBC(三)声明式事务的传播行为控制

文章目录 前言10.5 声明式事务的传播行为控制10.5.1 修改测试代码&#xff08;1&#xff09;新建一个Service类&#xff0c;并引用UserService&#xff08;2&#xff09;修改主启动类 10.5.2 PROPAGATION_REQUIRED10.5.2.1 tm.getTransaction&#xff08;1&#xff09;获取事务…

一拖二ADG数据库拆除其中一个复制关系

一、备库一操作 1、检查 select name,open_mode,switchover_status,database_role from v$database; select group#,thread#,status from v$standby_log; select thread#,sequence#,first_time,next_time,applied from v$archived_log where thread#1 order by 4; select …

用于自监督视觉预训练的屏蔽特征预测

Masked Feature Prediction for Self-Supervised Visual Pre-Training 一、摘要 提出了用于视频模型自监督预训练的掩模特征预测&#xff08;MaskFeat&#xff09;。首先随机屏蔽输入序列的一部分&#xff0c;然后预测屏蔽区域的特征。研究了五种不同类型的特征&#xff0c;发…

netfilter内核实现

Netfilter是Linux内核中的一个框架&#xff0c;用于实现数据包的过滤、NAT(Network Address Translation)、连接追踪以及其他网络功能。Netfilter框架的主要实现包括如下几个部分&#xff1a; 钩子函数&#xff08;Hooks&#xff09;&#xff1a;Netfilter框架在Linux内核中通…