irpas技术客

python基础:Python MySQL_埋头苦干的渗透小白_python-mysql

大大的周 5105

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()


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #pythonmysql #Python #MySQL