python中操作mysql
一、python中操作mysql步骤
1.1导入模块
import pymysql
1.2Connection 对象
用于建立与数据库的连接
创建对象:调用connect()方法
conn=pymysql.connect(参数列表)
参数host:连接的mysql主机,如果本机是’localhost’
参数port:连接的mysql主机的端口,默认是3306
参数database:数据库的名称
参数user:连接的用户名
参数password:连接的密码
参数charset:通信采用的编码方式,推荐使用utf8
1.2.1对象的方法
close()关闭连接
commit()提交
cursor()返回Cursor对象,用于执行sql语句并获得结果
1.3Cursor对象
用于执行sql语句,使用频度最高的语句为select、insert、update、delete
获取Cursor对象:调用Connection对象的cursor()方法
cs1=conn.cursor()
1.3.1对象的方法
-
close()关闭
-
execute(operation [, parameters ])执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句
-
**fetchone()**执行查询语句时,获取查询结果集的第一个行数据,返回一个元组
-
**fetchall()**执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
5)**fetchmany(index)**默认获取一个行,可以传入int类型的数据根据传入的数据的大小返回,返回的是一个元组里面包含着小元组
1.3.2对象的属性
rowcount只读属性,表示最近一次execute()执行后受影响的行数
connection获得当前连接对象
二、查询数据
import pymysql
zh = input("请输入账号:").strip()
mm = input("请输入密码:").strip()
# strip()用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
# 1.建立连接
con = pymysql.connect(host="localhost", port=3306,
user="root",
password="4444",
database="python_text",
charset="utf8"
)
# 2.创建游标对象
dx = con.cursor()
# 3.查询数据
sql = 'select * from yh where na = "%s" and pwd = "%s" ' %(zh, mm)
ans = dx.execute(sql)
if ans:
print("登录成功")
else:
print("登录失败")
dx.close()
con.close()
2.1存在的sql注入问题
当知道用户的账号不知道密码的情况
请输入账号:qqq" -- xx
# qqq表示的是你的账户, 后面的双引号取决于在sql语句里面包裹%s
# 时使用的是双引号还是单引号.
# -- : 在sql语句里面添加 -- 表示注释
请输入密码:x
登录成功
当密码和账号都不知道的情况
请输入账号:xxx" or 1=1 -- hahaha
请输入密码:
登录成功
# select * from yh where na = "xxx" or 1=1 -- haha" and pwd = ""
2.2sql注入的解决方法
在拼接sql语句的时候,为了方便的拼接用户名和密码,使用单引号或者是双引号将 %s 括起来,
在使用防止sql注入的方法的时候不能够使用单引号或者双引号将其括起来
在调用execute方法的时候将用户名和密码以元组的形式传递过去,即可以防止sql注入.
sql = 'select * from yh where na = %s and pwd = %s '
ans = dx.execute(sql, (zh, mm))
2.3查询的结果返回为重点的形式
import pymysql
a = pymysql.connect(host="localhost", port=3306,
database="python_text", user="root",
password="4444", charset="utf8")
# 光标对象
# 需要查询的数据为重点的形式的话,在光标对象里面传入一个制定的数据
b = a.cursor(pymysql.cursors.DictCursor)
c = b.execute("select * from students")
print(b.fetchone())
2.4 光标位置的移动
光标对象.scroll(位置, 相对还是绝对)
import pymysql
a = pymysql.connect(host="localhost", port=3306,
database="python_text", user="root",
password="4444", charset="utf8")
# 光标对象
b = a.cursor(pymysql.cursors.DictCursor)
c = b.execute("select * from students")
print(b.fetchone())
#b.scroll(0, mode='absolute') # 绝对位置移动
b.scroll(-1, mode="relative") # 相对位置移动
print(b.fetchone())
三、数据的增删改
3.1一次增加一条数据
import pymysql
a = pymysql.connect(host="localhost", port=3306,database="weather_database",user="root",
password="4444", charset="utf8")
date = ("3月18日","中雨转小雨","12/8℃","风3-4级")
b = a.cursor()
# 增删改
sql = "insert into weather value(%s, %s, %s, %s)"
index = b.execute(sql, date)
# 在进行增删改的时候需要调用
a.commit()
b.close()
a.close()
3.2一次插入多行数据
# 增删改
sql = "insert into weather values(%s, %s, %s, %s)"
index = b.executemany(sql, [(数据1), (数据2), (数据3)])
xecute(sql, date)
在进行增删改的时候需要调用
a.commit()
b.close()
a.close()
### 3.2一次插入多行数据
```python
# 增删改
sql = "insert into weather values(%s, %s, %s, %s)"
index = b.executemany(sql, [(数据1), (数据2), (数据3)])