杨梅冲
每天在想什么呢?
随笔 - 198,  文章 - 0,  评论 - 8,  阅读 - 17万

一、pymysql模块:链接、执行mysql

  安装模块:pip3 install pymysql

复制代码
# 语法:
# pymysql操作数据库:
        
1. conn = pymysql.connect # 链接数据库
2. cursor = con.cursor()
3. cursor.execute(sql语句)

# 查询
4. cursor.fetchone() # 取一行数据
5. cursor.fetchmany(5) # 取指定几行数据
6. cursor.fetchall() #  取到所有的结果集
            
# 增加            
# 增加一条数据:
cursor.execute(insert 语句, 传入的参数)
# 增加多条数据:
cursor.executemany(insert 语句, 传入的多个参数)
conn.commit()                
                
# 删除
# 删除一条数据:
cursor.execute(delete语句, 传入的参数)
# 删除多条数据:
cursor.executemany(delete语句, 传入的多个参数)
conn.commit()
            
# 修改
# 修改一条数据:
cursor.execute(update语句, 传入的参数)
#修改多条数据:
cursor.executemany(update语句,传入的多个参数)
conn.commit()
复制代码
复制代码
# 查询
import pymysql

user=input('用户名: ').strip()
password=input('密码: ').strip()

#链接
conn=pymysql.connect(host='localhost',user='root',password='root',database='user',charset='utf8')
#游标
cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
#cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)


#执行sql语句
sql='select * from user where username="%s" and pwd="%s"' %(user,password) #注意%s需要加引号,但是像这样写会导致sql注入的情况
print(sql)
res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(res) # 1

cursor.close()
conn.close()

if res:
    print('登录成功')
else:
    print('登录失败')
复制代码

execute()之sql注入

复制代码
# sql注入
sql = "select * from user where username = '%s' and pwd = '%s'" % (username, pwd)
res = cursor.execute(sql)
# 采用上面这种方式,很容易被进行sql注入,影响数据安全 #1、sql注入之:用户存在,绕过密码 simon' -- 任意字符 #2、sql注入之:用户不存在,绕过用户与密码 xxx' or 1=1 -- 任意字符 # 解决方法 # 原来是我们对sql进行字符串拼接 # sql="select * from user where username='%s' and pwd='%s'" %(user,password) # print(sql) # res=cursor.execute(sql) #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了) sql="select * from user where username=%s and pwd=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上 res=cursor.execute(sql,(user,password)) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
复制代码

数据表增加一条或多条数据:

复制代码
import pymysql

### 链接mysql数据库
conn = pymysql.connect(host='localhost', user='root', password='root', database='user')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "insert into userinfo (name, email) values  (%s, %s)"
### 增加一条数据
# cursor.execute(sql, ('zekai6', 'yui')) # 执行sql语句,返回sql影响成功的行数

### 增加多条数据
data = []
for i in range(3000000):
    data.append(('root'+str(i), 'root'+str(i)+'@qq.com'))

cursor.executemany(sql, data)
### 提交后才发现表中插入记录成功
conn.commit()

cursor.close()
conn.close()
复制代码

删除数据:

复制代码
import pymysql

### 链接mysql数据库
conn = pymysql.connect(host='localhost', user='root', password='root', database='user')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "delete from  user where id=%s"

### 删除一条数据
# cursor.execute(sql, (11))
try:
    cursor.executemany(sql, (12,13,14))
    ### 提交
    conn.commit()
except Exception as e:
    conn.rollback()

# print(cursor.lastrowid)

cursor.close()
conn.close()
复制代码

获取插入的最后一条数据的自增ID

复制代码
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='root',database='user')
cursor=conn.cursor()

sql='insert into userinfo(username,pwd) values("xxx","123");'
rows=cursor.execute(sql)
print(cursor.lastrowid) #在插入语句后查看

conn.commit()

cursor.close()
conn.close()
复制代码

 

posted on   杨梅冲  阅读(172)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示