python基础:Python MySQL
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.connector
mydb=mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword"
)
mycursor=mydb.cursor()
mycursor.execute("create database zdz")
(mydb和mycursor为变量)
检查数据库是否存在
可以通过使用“SHOW DATABASES
”语句列出系统中所有数据库:
import mysql.connector
mydb=mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword"
)
mycursor=mydb.cursor()
mycursor.execute("show databases")
for x in mycursor:
print(x)
或者通过在建立连接时尝试访问数据库:
import mysql.connector
mydb=mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="zdz"
)
如果不错在名为“zdz”的数据库,会返回错误。
创建表
创建表
如需在 MySQL 中创建表,请使用 “CREATE TABLE
” 语句。
(请确保在创建连接时定义数据库的名称。)
import mysql.connector
mydb = 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.connector
mydb = 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.connector
mydb = 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.connector
mydb = 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.connector
mydb = 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.connector
mydb = 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.connector
mydb = 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.connector
mydb = 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()
来源:埋头苦干的渗透小白