

1.首先需要导入pymysql模块
2.完整的代码
import pymysql
# 1.连接mysql服务端
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='888',
database='b1',
charset='utf8mb4',
autocommit=True, # 自动执行增删改查操作
)
# 2.产生一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 3.编写sql语句
sql = 'select * from t1'
# 4.发送给服务端
cursor.execute(sql)
# 5.获取命令的执行结果
res = cursor.fetchall()
print(res) # [{'id': 0, 'name': 'ming'}]
3.获取结果的三种方式:
# 1.获取结果中的第一条数据
cursor.fetchone()
# 2.获取结果中的所有数据
cursor.fetchall()
# 3.获取结果中指定条数的数据 n表示自定义条数,超出范围的话有多少条就展示多少条
cursor.fetchmany(n)
4.指定位置,类似于文件中的光标的概念
# 1.relative 基于当前位置往后移动
cursor.scroll(1, mode='relative')
# 2.基于数据集开头的位置往后移动
cursor.scroll(0, mode='absolute')
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
database='a1',
user='root',
password='888',
charset='utf8mb4',
autocommit=True,
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
username = input('username').strip()
password = input('password').strip()
sql = 'select * from login where name=%s and pwd=%s'
res = cursor.execute(sql, (username, password))
if res:
print('登录成功')
else:
print('用户名或密码错误')
# 插入单条数据方法1:
# sql = 'insert into login values(3, "xieming", "111")'
# 插入单条数据方法2:
# sql = 'insert into login(name, pwd) values("xieming", "111")'
# res = cursor.execute(sql)
# 插入多条数据
# sql = "insert into login(name, pwd) values(%s,%s)"
# sql = "insert into login values(%s,%s)"
# res = cursor.executemany(sql, [("xm", '111'), ('mx', '111')])
1.出现的sql注入问题:
当我们在用户登录系统中输入用户信息的时候会出现sql注入问题
select * from userinfo where name='jason' -- haha' and pwd=''
select * from userinfo where name='xyz' or 1=1 -- heihei' and pwd=''
2.本质:利用一些特殊符号的组合产生特殊的含义,使得正常的sql语句失效,从而逃脱正常的业务逻辑
3.措施:针对数据自己不要处理,交给pymysql中的方法(execute)自动去过滤处理
sql = "select * from userinfo where name=%s and pwd=%s"
cursor.execute(sql, (username, password)) # 自动识别%s 并自动过滤各种符合 最后合并数据
1.as语法:给字字段和表起别名
2.comment语法:给表和字段添加注释信息
create table s1(
id int comment '学生编号',
name varchar(32)
) comment '这是一张学生信息表';
3.concat、concat_ws语法
SELECT
concat( sid,'|', gender )
FROM
student;
SELECT
CONCAT_WS( '$', sid, gender, class_id, sname )
FROM
student;
4.exists语法
select * from userinfo where exists (select * from department where id<100)
import pymysql
from pymysql import IntegrityError
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
database='a1',
user='root',
password='888',
charset='utf8mb4',
autocommit=True,
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
def register():
try:
print('注册')
username = input('username').strip()
password = input('password').strip()
sql = 'insert into login(name, pwd) values(%s,%s)'
res = cursor.execute(sql, (username, password))
print(res)
if res:
print('注册成功')
except IntegrityError:
print('用户名已存在')
def login():
print('登录')
username = input('username').strip()
password = input('password').strip()
sql = 'select * from login where name=%s and pwd=%s'
res = cursor.execute(sql, (username, password))
if res:
print('登录成功')
else:
print('用户名或密码错误')
func_dic = {
'1': register,
'2': login,
}
def run():
while True:
print(
"""
1 注册
2 登录
"""
)
choice = input('请输入功能编号(q退出)').strip()
if choice == 'q': return
if choice in func_dic:
func_dic.get(choice)()
else:
print('请输入正确的功能编号')
run()