Python MySQL

  • mysql入门
    • MySQL 数据库
    • 安装 MySQL 驱动程序
    • 测试 MySQL Connector
    • 创建连接
  • 创建数据库
    • 创建数据库
    • 检查数据库是否存在
  • 创建表
    • 创建表
    • 检查表是否存在
    • 主键
  • 插入表(`Insert`)
    • INSERT INTO
    • **插入多行**
    • **活动已插入的id**
  • Python Select From
    • 从表中选取
    • 选取列
    • 使用 fetchone() 方法
  • Python MySQL Where
    • 使用筛选器来选取
    • 通配符
    • 防止 SQL 注入
  • Python MySQL Order By
    • 结果排序
    • 降序排序
  • Python MySQL Delete From
    • 删除记录
    • 防止 [SQL 注入](https://blog.csdn.net/weixin_51047454/article/details/123533237?spm=1001.2014.3001.5501)
  • Python MySQL Drop Table
    • 删除表
    • 只在表存在时删除
  • Python 更新表
    • 更新表
    • 防止 SQL 注入
  • Python MySQL Limit
    • 限定结果
    • 从另一个位置开始

mysql入门

MySQL 数据库

为了能够试验本教程中的代码示例,应该在计算机上安装 MySQL。
请在这里下载免费的 MySQL 数据库:下载地址。

安装 MySQL 驱动程序

Python 需要 MySQL 驱动程序来访问 MySQL 数据库。
在本教程中,我们将使用驱动程序 “MySQL Connector”。
我们建议使用 PIP 安装 “MySQL Connector”。
PIP 很可能已经安装在 Python 环境中。
将命令行导航到 PIP 的位置,然后键入以下内容:
下载并安装 “MySQL Connector”:

python -m pip install mysql-connector

测试 MySQL Connector

如需测试安装是否成功,或者是否已安装 “MySQL Connector”,运行下面代码,若无报错就表示安装成功:

import mysql.connector

创建连接

首先创建与数据库的连接。
使用 MySQL 数据库中的用户名和密码:

import mysql.connector
mydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword"
)print(mydb)

创建数据库

创建数据库

如需在 MySQL 中创建数据库,请使用 “CREATE DATABASE” 语句:

创建名为“zdz”的数据库

import mysql.connectormydb=mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword"
)mycursor=mydb.cursor()
mycursor.execute("create database zdz")

(mydb和mycursor为变量)

检查数据库是否存在

可以通过使用“SHOW DATABASES”语句列出系统中所有数据库:

import mysql.connectormydb=mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword"
)mycursor=mydb.cursor()
mycursor.execute("show databases")for x in mycursor:print(x)


或者通过在建立连接时尝试访问数据库:

import mysql.connectormydb=mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="zdz"
)

如果不错在名为“zdz”的数据库,会返回错误。

创建表

创建表

如需在 MySQL 中创建表,请使用 “CREATE TABLE” 语句。
(请确保在创建连接时定义数据库的名称。)

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="zdz"
)mycursor = mydb.cursor()mycursor.execute("CREATE TABLE biao1 (id int(10),name varchar(10),passwd varchar(10))")
#sql语法:create table 表名(字段1名 字段1类型,字段2名 字段2类型,字段3名 字段3类型);

检查表是否存在

可以通过使用 “SHOW TABLES” 语句列出数据库中的所有表,来检查表是否存在:

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="zdz"
)mycursor = mydb.cursor()mycursor.execute("SHOW TABLES")for x in mycursor:print(x)

主键

创建表时,还应该为每条记录创建一个具有唯一键的列。
这可以通过定义 PRIMARY KEY 来完成。
我们使用语句 “INT AUTO_INCREMENT PRIMARY KEY”,它将为每条记录插入唯一的编号。从 1 开始,每个记录递增 1。

1、创建表时创建主键:

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="mydatabase"
)mycursor = mydb.cursor()mycursor.execute("CREATE TABLE biao2 (id int auto_increment primary key,name varchar(10),passwd varchar(10))")
#这里把主键给到“id”

2、如果表已存在,请使用 ALTER TABLE 关键字:

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="mydatabase"
)mycursor = mydb.cursor()mycursor.execute("alter table biao1 add column idid int auto_increment primary key")

插入表(Insert

INSERT INTO

如需填充 MySQL 中的表,请使用 “INSERT INTO” 语句。
在表 “biao1” 中插入记录:

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="zdz"
)
mycursor = mydb.cursor()sql = "insert into biao1 (id,name, passwd) values ('1','admin','admin)"
mycursor.execute(sql)
#或者写成:
#sql = "insert into biao1 (id,name,passwd) values (%s,%s,%s)"
#val = ('1','admin','admin')
#mycursor.execute(sql,val)
mydb.commit()print(mycursor.rowcount, "record inserted.")

重要:请注意语句 mydb.commit()。需要进行更改,否则表不会有任何改变。

插入多行

要在表中插入多行,请使用 executemany() 方法。
executemany() 方法的第二个参数是元组列表,包含要插入的数据:

用数据填充biao2:

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="zdz"
)
mycursor = mydb.cursor()
sql = "insert into biao2 (name, passwd) VALUES (%s, %s)"
val = [('zdz','zdz32'),('bh','bh01'),('mjw','mjw16'),('zxr','zxr42'),('zyc','zyc43')
]
mycursor.executemany(sql, val)
mydb.commit()print(mycursor.rowcount, "was inserted.")

活动已插入的id

可以通过询问 cursor 对象来获取刚插入的行的 id。
注释:如果插入不止一行,则返回最后插入行的 id。

插入一行并返回id:

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="zdz"
)
mycursor = mydb.cursor()sql = "INSERT INTO biao2 (name,passwd) VALUES (%s, %s)"
val = ("admin", "admin666")
mycursor.execute(sql, val)
mydb.commit()
print("1 record inserted, ID:", mycursor.lastrowid)

Python Select From

从表中选取

从表 “biao2” 中选取所有记录,并显示结果:

import mysql.connectormydb = mysql.connector.connect(host="localhost",user="yourusername",passwd="yourpassword",database="zdz"
)
mycursor = mydb.cursor()#和前面一样,下面为了简洁统统省略
mycursor.execute("SELECT * FROM biao2")#执行sql语句,结果赋给mycursor
myresult = mycursor.fetchall()#用了 fetchall() 方法,该方法从最后执行的语句中获取所有行,结果赋给myresult。
for x in myresult:print(x)#遍历myresult结果(下面为了简洁统统省略)


+fetchall() 方法:从最后执行的语句中获取所有行

选取列

如需只选择表中的某些列,请使用 “SELECT” 语句,后跟列名:
仅选择名称和地址列:

...mycursor.execute("SELECT id,name,passwd FROM biao2")...

使用 fetchone() 方法

如果只对一行感兴趣,可以使用 fetchone() 方法。fetchone() 方法将返回结果的第一行

...mycursor.execute("SELECT * FROM biao2")
myresult = mycursor.fetchone()
print(myresult)#只返回一行,所以不用遍历

Python MySQL Where

使用筛选器来选取

从表中选择记录时,可以使用 “where” 语句对选择进行筛选:

...sql = "SELECT * FROM biao2 WHERE name='zyc'"
mycursor.execute(sql)
myresult = mycursor.fetchall()
for x in myresult:print(x)#因为匹配条件的可能不止一条,所以需要遍历输出

通配符

也可以选择以给定字母或短语开头、包含或结束的记录。请使用 表示通配符。
查找密码中包含"2"的记录:

...sql = "SELECT * FROM biao2 WHERE passwd LIKE '%1%'"
mycursor.execute(sql)
myresult = mycursor.fetchall()...

防止 SQL 注入

当用户提供查询值时,应该转义这些值。此举是为了防止 SQL 注入,这是一种常见的网络黑客技术,可以破坏或滥用你的数据库
mysql.connector 模块拥有转义查询值的方法,
使用占位符 %s 方法来转义查询值:

...sql = "SELECT * FROM customers WHERE passwd=%s"
pas = ("admin666", )
mycursor.execute(sql,pas)
myresult = mycursor.fetchall()...


sql注入教程——>传送门

Python MySQL Order By

结果排序

请使用 ORDER BY 语句按升序或降序对结果进行排序。(ORDER BY 关键字默认按升序对结果进行排序。若要按降序对结果进行排序,请使用 DESC 关键字。)
以字符顺序对姓名进行排序:

...mycursor.execute("SELECT * FROM biao2 ORDER BY name")...

降序排序

请使用 DESC 关键字按降序对结果进行排序:

...mycursor.execute("SELECT * FROM biao2 ORDER BY id DESC")...

Python MySQL Delete From

删除记录

可以使用 “DELETE FROM” 语句从已有的表中删除记录:

...mycursor.execute("DELETE FROM biao2 WHERE name = 'admin'")
mydb.commit()...

注意
1.请注意语句 mydb.commit()。需要进行更改,否则表不会有任何改变。
2.请注意 DELETE 语法中的 WHERE 子句:WHERE 子句指定应删除哪些记录。如果省略 WHERE 子句,则将删除所有记录!

防止 SQL 注入

☆在 delete 语句中,转义任何查询的值也是一种好习惯。此举是为了防止 SQL 注入,这是一种常见的网络黑客技术,可以破坏或滥用你的数据库。
mysql.connector 模块使用占位符 %s 来转义 delete 语句中的值:

...sql = "DELETE FROM biao2 WHERE passwd = %s"
pas = ("ylj31", )
mycursor.execute(sql,pas)
mydb.commit()...

Python MySQL Drop Table

删除表

可以使用 “DROP TABLE” 语句来删除已有的表。
删除 “biao1” 表:

...mycursor.execute("DROP TABLE biao1")

只在表存在时删除

如果要删除的表已被删除,或者由于任何其他原因不存在,那么可以使用 IF EXISTS 关键字以避免出错:

mycursor.execute("DROP TABLE IF EXISTS biao1")#添加'IF EXITS判断'

Python 更新表

更新表

可以使用 “UPDATE” 语句来更新表中的现有记录。
把密码列中的 “zdz32” 覆盖为 “zdz3232”:

...mycursor.execute("UPDATE biao2 SET passwd='zdz3232' WHERE passwd='zdz32'")
mydb.commit()#要有
print(mycursor.rowcount, "record(s) affected")

注意:请注意 UPDATE 语法中的 WHERE 子句:WHERE 子句指定应更新的记录。如果省略 WHERE 子句,则所有记录都将更新!

防止 SQL 注入

同上,在update语句中要有转义的好习惯,防止sql注入。
mysql.connector 模块使用占位符 %s 来转义update 语句中的值:

sql = "UPDATE biao2 SET passwd= %s WHERE passwd = %s"
pas = ("pzdz32", "zdz3232")
mycursor.execute(sql,pas)
mydb.commit()

Python MySQL Limit

限定结果

可以使用 “LIMIT” 语句限制从查询返回的记录数。
选取 “biao2” 表中的前四条记录:

mycursor.execute("SELECT * FROM biao2 LIMIT 4")
myresult = mycursor.fetchall()#记得遍历输出

从另一个位置开始

如果想从第二条记录开始返回四条记录,您可以使用 “OFFSET” 关键字:

mycursor.execute("SELECT * FROM biao2 LIMIT 4 OFFSET 1")#因为从0开始数,所以要从第二个开始,offset后面跟1
myresult = mycursor.fetchall()

python基础:Python MySQL相关推荐

  1. Python基础-Python基础使用

    Python基础-Python基础使用 1.Python解释器 在Python文件的开头加入以下代码就制定了解释器. #!/usr/bin/env python # _*_ coding:utf-8 ...

  2. python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值

    python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...

  3. 每日整理Python基础——python教程入门学习

    01_Linux基础 1.操作系统的作用? 操作系统是配置在计算机硬件上的第一层软件,主要作用是管理好硬件设备. 2.Linux中根目录和家目录分别用什么表示? /表示根目录.~表示家目录 3.Lin ...

  4. Python 基础 —— Python程序员常犯的那些错误

    1. 迭代时修改一个列表 删除列表中的奇数 >>>numbers = [i for i in range(10)] >>>numbers [0, 1, 2, 3, ...

  5. Python基础--Python简介和入门

    ☞写在前面 在说Python之前,我想先说一下自己为什么要学Python,我本人之前也了解过Python,但没有深入学习.之前接触的语言都是Java,也写过一些Java自动化用例,对Java语言只能说 ...

  6. python基础-python的字符串内建函数

    python基础-字符串内建函数 文章目录 python基础-字符串内建函数 前言 常用的函数 1.center() 2.count() 3.endswith() 4.startswith() 5.s ...

  7. Python 基础 — Python 简介

    前言 未来是数据的世界,而 python 是一门可以高效简洁处理数据的语言,博主打算花一些时间完成 python 学习的从 0 到 1.以此相关系列博客作为一个记录. 1. Python 简介 Pyt ...

  8. python 导出mysql 视图_【Python基础】mysql数据库视图是什么

    什么是视图 ( view ) ? 视图,即虚拟表,通过底层接口封装的 SQL 语句查询到的内容作为虚拟表中的数据,因此视图中的记录来自数据表,它本身不存储数据. 视图可以连接一个或多个数据表的部分字段 ...

  9. Python基础----python的使用(二)

    学习一下python,这里对python的基础知识做一个整理.似等了一百年忽而明白,即使再见面,成熟地表演,不如不见. python的一些应用 一.类似于java中的MessageFormat用法 w ...

  10. csdn新出炉的Python基础Python的简介和环境搭建和环境变量

    一.前言 hello呀,大家好我叫涂九,今天呢想换中方式和大家唠唠,因为发现之前的文章写得有些乱,我的强迫症犯了,打算给大家从Python的基础开始讲起,今天我们主要讲Python简介和环境搭建和环境 ...

最新文章

  1. 2021 年 NLP 重要国际会议时间
  2. Flask项目支持https
  3. python中_new_和_init_的区别_Python 中的__new__和__init__的区别
  4. 【个人笔记】OpenCV4 C++ 快速入门 29课
  5. Atitit  补充说明 sql知识图谱与线路图attilax总结补充说明
  6. 如何检查Xcode是否被植入了XcodeGhost
  7. 中原建业在港上市首日破发,基石投资者祥来及楼公望亏780万港元
  8. keepalived 单播模式
  9. spark的fold函数理解
  10. enoent ENOENT: no such file or directory,
  11. 腾讯云服务器性能评测:配置参数16核 32G 28M
  12. The Innovation | Volume 3 Issue 3 Live Now
  13. 计算机系统结构专业学什么,江苏大学专业介绍:计算机系统结构
  14. 洛谷 P1359 租用游艇
  15. 侍魂哪个服务器人最多,为什么那么多人喜欢侍魂2,而我却觉得侍魂5比2好玩多了?...
  16. 分批处理list中的数据_如何分批次处理List集合中的数据
  17. postgres 源码解析25 缓冲池管理器-3
  18. video JS实现多视频循环播放
  19. 计算机主机风扇声音大的原因,电脑电源风扇声音大的原因与解决办法
  20. 【数论】求组合数的四种方法

热门文章

  1. 解决spacedesk卸载/重装软件时显示 指定的账户已存在
  2. 国家网信办《网络数据安全管理条例(征求意见稿)》为企业带来哪些新思考?
  3. JVM(4)-MAT: 支配树 Dominator Tree
  4. Rime(1):介绍与安装
  5. C++游戏---皇后PK
  6. 将一个给定的 n×n 方阵转置(行列互换)
  7. g6的minimap中的配置_Minimap 缩略图
  8. Database of Fog
  9. V831烧录 【app文件的烧写】
  10. 《中华颂》朗诵比赛准备