pymysql语法_pymysql的基本使用

TOC

当我们在写程序中需要使用到数据库的时候,尽量在代码层次实现一些限制,例如两张表,我们不再使用外键去关联表与表之间的关系,我们可以在程序层面修改其中的一张表,再去修改另一张表的数据,这样会减轻数据库的压力,代码层次可以实现的,就不要再去使用数据库。

pymysql的语法

import pymysql # 下载并导入pymysql模块

# 建立连接,并产生一个连接会话对象

conn = pymysql.connect(

user='root',

password='123',

host='127.0.0.1',

port=3306, # 注意:端口号不需要用引号引起来

charset='utf8',

database='db1'

)

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象

# cursor=pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回

# 若不加,则返回的是括号加数据,例如:(1, 张三),不会显示表中的字段,很不方便

sql = 'select * from user_info' # 语句后可不加分号,pymysql会自动添加

res = cursor.execute(sql) # 执行sql语句

# print(res) # execute返回的是当前sql语句所影响的行数,并不是查询结构

# ret = cursor.fetchone() # 只获取查询的结果中的一条数据

# ret = cursor.fetchall() # 获取查询结果的全部数据

# ret = cursor.fetchmany(2) # 获取指定行数的数据,如果数字超了,也不会报错

# print(ret)

print(cursor.fetchone())

print(cursor.fetchone()) # 连续使用2次,并不会重复展示表中的第一条数据,执行一次取掉一次数据,执行第二次就取表中的第二行数据

# 相对移动

cursor.scroll(2, 'relative') # 基于指针所在的位置 往后偏移

# 绝对移动

cursor.scroll(1, 'absolute') # 基于起始位置,往后偏移

sql注入问题

利用特殊符号和注释语法 巧妙的绕过真正的sql校验

关键性的数据 不要自己手动去拼接 而是交由execute帮你去做拼接

采用手动拼接的情况

import pymysql

conn = pymysql.connect(

user='root',

password='123',

host='localhost',

port=3306,

charset='utf8',

database='db1'

)

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

username = input('username>>').strip()

password = input('password>>').strip()

sql = "select * from user_info where name = '%s' and password = '%s'" % (username, password)

# sql = 'select * from user_info where name = "%s" and password = "%s"' % (username, password)

# select * from user_info where name = "张三' -- fhjkasdhfkla" and password = "" 外层使用单引号出不来效果

print(sql)

cursor.execute(sql)

res = cursor.fetchall()

if res:

print(res)

else:

print('username or password error!')

解决办法:

交给pymysql中的execute进行处理

import pymysql

conn = pymysql.connect(

user='root',

password='123',

host='localhost',

port=3306,

charset='utf8',

database='db1'

)

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

username = input('username>>').strip()

password = input('password>>').strip()

# sql = "select * from user_info where name = '%s' and password = '%s'" % (username, password)

# sql = 'select * from user_info where name = "%s" and password = "%s"' % (username, password)

# select * from user_info where name = "张三' -- fhjkasdhfkla" and password = "" 外层使用单引号出不来效果

sql = "select * from user_info where name = %s and password = %s"

print(sql)

# cursor.execute(sql)

cursor.execute(sql, (username, password))

res = cursor.fetchall()

if res:

print(res)

else:

print('username or password error!')

数据的增删查改

尝试进行增操作:

import pymysql

conn = pymysql.connect(

user='root',

password='123',

host='localhost',

port=3306,

charset='utf8',

database='db1'

)

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

sql = 'insert into user_info(name, password) value("刘和平", 17)'

res = cursor.execute(sql)

print(res)

让我们去表中看看,是否增加上去:

显然,并没有新增一条数据。

在pymysql中,如果进行增删改等操作,对于这些执行重要程度偏高的语句,需要有一步确认操作(commit):

import pymysql

conn = pymysql.connect(

user='root',

password='123',

host='localhost',

port=3306,

charset='utf8',

database='db1'

)

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

sql = 'insert into user_info(name, password) value("刘和平", 17)'

res = cursor.execute(sql)

conn.commit() # 提交

print(res)

观察表中的数据:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值