讲一下pymysql的具体使用,在此之前默认大家会写sql语句。
下面是一些简单概念:
数据库管理系统
- DBMS 是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它是用户(或应用程序)与数据库之间的接口。
- 常见的DBMS:MySQL, Oracle, PostgreSQL, SQL Server, SQLite,Redis, MongoDB, Hbase, Neo4j 等。
DDL: 数据定义语言:简称DDL(Data Definition Language) 作用: 用来定义数据库对象:数据库,表,列/字段等。 关键字: create,drop,alter等 DML: 数据操作语言:简称DML(Data Manipulation Language) 作用:用来对数据库中表的记录进行更新。 关键字: insert,delete,update等 DQL: 数据查询语言:简称DQL(Data Query Language) 作用:用来查询数据库中表的记录。 关键字: select,from,where等 DCL: 数据控制语言:简称DCL(Data Control Language) 用来定义数据库的访问权限和安全级别,及创建用户。
数据库分类:关系型数据库(SQL)和非关系型数据库(NoSQL)
可以粗略理解为:前者以表为主(包含字段,字段值),表内和表间有约束关系;
后者以键值对、文档、列族为主,没有固定结构
操作部分:
在pycharm中对MySQL进行操作前,我们需要先连接数据库:

需要安装库:
pip install pymysql
具体操作(需要保证pycharm已经连上数据库):
pymysql.connect()创建数据库连接
connect.cursor() 数据库连接中的方法 获取游标 用于后续的数据库操作(后面的游标用cur代称)
cur.execute(sql_op) #执行sql,其中sql_op是需要操作的SQL语句,操作完成后,需要进行.commit()提交才能完成对数据库中数据的修改,为保证数据安全,同样支持.rollback()操作
注意:在crud中,针对select查询操作是不需要提交的,可以直接从cur中获取结果
关于输入参数查询:为解决sql注入,将查询语句和参数分离,不使用fstring,使用%s占位符;在pymysql中所有的占位符都使用%s(会自动识别数据类型),这一点于python基础语法区分
import pymysql
# 创建连接
connection = pymysql.connect(
host='localhost',
port=3306,
user='',#此处填写用户名 与创建数据库连接时一致
password='',#此处填写密码 与创建数据库连接时一致
database='',#选择要操作的数据库
charset='utf8',
autocommit=False
)
#检查是否连接成功
if connection:
print('success')
print(connection)
else:
print('error')
# 创建/获取游标
curs = connection.cursor()
# 通过游标进行操作
row = curs.execute('select *from itheima.test_table') # 此处execute返回的是该操作影响了多少行的数据
print(row)
print()
result = curs.fetchone() # 真正的获取结果
print(result)
results = curs.fetchall() # 本质是在控制cur指针,指针扫描过的数据不会再回头去看,该步骤的输出会缺少第一个查询的数据
print(results)
curs.execute('select *from itheima.test_table')
print(curs.fetchmany(10)) # 指定行数输出,超出范围则输出全部查询结果
curs.execute('select *from itheima.test_table')
for item in curs:
# 可遍历 以tuple元组形式输出
print(item)
# crud操作
# row = curs.execute('insert into itheima.test_table(name,weight) value("taki",49);')
# connection.commit()
# 保证系列操作一同完成/取消
# try:
# curs.execute('update itheima.test_table set weight=weight-10 where name="taki";')
# curs.execute('update itheima.test_table set weight=weight-10 where name="aki";')
# except Exception as e:
# connection.rollback()#回滚 清空内存
# print(f'error{e}')
# else:
# connection.commit()#提交
try:
sql_op = """
create table if not exists new_table(
id int primary key AUTO_INCREMENT,
name varchar(20),
weight int
);
"""
curs.execute(sql_op)
except Exception as e:
connection.rollback() # 回滚 执行undolog 清空缓冲区
print(f'error{e}')
else:
connection.commit() # 提交
name = input('姓名:')
weight = int(input('体重:'))
#外层使用单引号的话内层需要用双引号;外层双引号的话则相反
sql_op = f'select * from test_table where name="{name}" and weight={weight};'
row = curs.execute(sql_op)
if row:
print(row,'success')
#解决sql注入,将查询语句和参数分离 不使用fstring,使用%s占位符 在pymysql中所有的占位符都使用%s(会自动识别数据类型),这一点于python基础语法区分
sql_op = 'select * from test_table where name=%s and weight=%s;'
cs = (name,weight)
row = curs.execute(sql_op,cs)
if row:
print(row,'success')
# 关闭游标
curs.close()
# 关闭连接
connection.close()
pymysql操作流程总结:
1.导入pymysql
2.使用pymysql.connect()创建数据库连接
3.获取cursor游标
4.通过cursor执行SQL语句
5.关闭cursor
6.关闭数据库连接

696

被折叠的 条评论
为什么被折叠?



