python中操作mysql

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对象的方法
  1. close()关闭

  2. execute(operation [, parameters ])执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句

  3. **fetchone()**执行查询语句时,获取查询结果集的第一个行数据,返回一个元组

  4. **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)])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值