python操作数据库语句_Python操作数据库

pymysql模块简单实用

1、安装pymysql模块

pip3 install PyMySQL

2、建立连接

与MySQL服务端建立连接

conn=pymysql.connect(

host = '127.0.0.1', # ip

port = 3306, #端口

user = 'root', # 数据库用户名

password = '123', # 数据库密码

database = 'egon', # 数据库名字

charset = 'utf8' # 编码千万不要加- 如果写成了utf-8会直接报错

autocommit = True # 这个参数配置完成后 增删改操作都不需要在手动加conn.commit了

)

3、产生游标对象

cursor = conn.cursor(pymysql.cursors.DictCursor)

# 产生一个游标对象 以字典的形式返回查询出来的数据 键是表的字段 值是表的字段对应的信息

# cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示

4、执行sql语句

#执行sql语句

sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引号

res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目

print(res)

# r1 = cursor.fetchone() #返回一条,游标前进一次

# r2 = cursor.fetchone() #返回一条,游标再前进一次

# r3 = cursor.fetchone()

r = cursor.fetchall() # 直接拉取所有结果

print(r)

cursor.close()

conn.close()

if res:

print('登录成功')

else:

print('登录失败')

用户登录案例

import pymysql

# 建立连接

conn = pymysql.connect(

host='127.0.0.1',

port=3306,

user='root',

password='Quattro!',

database='db1',

charset='utf8',

autocommit=True

)

# 创建游标

cursor = conn.cursor(pymysql.cursors.DictCursor)

username = input('输入用户名:').strip()

password = input('输入密码:').strip()

sql = 'select * from user where username = %s and password = %s'

res = cursor.execute(sql,(username, password)) #能够帮你自动过滤特殊符号 避免sql注入的问题

if res:

print(cursor.fetchall())

else:

print('登录失败')

SQL注入

利用注释等特殊符号,篡改sql语句,从而达到自己的目的

MySQL中的注释: - - #

注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符

根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'

sql注入一:知道用户名,绕过密码

select * from user where name = 'zjy' - - asldkfjalsdjfad任意字符

sql注入二:不知道用户名,绕过用户名和密码

select * from user where name = 'zjy' or 1=1 - - alskdjflasjdflajsdlfk任意字符

解决方案:

# 原来是我们对sql进行字符串拼接

# sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)

# print(sql)

# res=cursor.execute(sql)

#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)

sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上

res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

增删改:conn.commit()

增:

import pymysql

conn = pymysql.connect(

host='localhost',

port=3306,

user='root',

password='123',

database='db1',

charset='utf8',

autocommit=True #如果不加这个需要手动 conn.commit ,否则数据增删改不了。

)

# 插入方式一:

# sql='insert into userinfo(name,password) values("root","123456");'

# res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数

# print(res)

# 插入方式二:

# sql='insert into userinfo(name,password) values(%s,%s);'

# res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数

# print(res)

# 插入方式三:

cursor = conn.cursor(pymysql.cursors.DictCursor)

sql = 'insert into user(username, password) values(%s, %s)'

res = cursor.executemany(sql, [('user1','pwd1'),('user2','pwd2')])

# res是受影响的记录数量

cursor.close()

conn.close()

查:fetchone, fetchall, fetchmany

#执行sql语句

sql='select * from userinfo;'

rows=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询

# cursor.scroll(3,mode='absolute') # 相对绝对位置移动

# cursor.scroll(3,mode='relative') # 相对当前位置移动

res1=cursor.fetchone() # 拉取一条数据

res2=cursor.fetchone()

res3=cursor.fetchone()

res4=cursor.fetchmany(2) # 拉取两条数据

res5=cursor.fetchall() # 拉取全部数据

conn.commit() #提交后才发现表中插入记录成功,连接时如果写了 autocommit=True,就不需要这行

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

print(cursor.lastrowid) #在插入语句后查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值