首先,插入pymysql模块
import pymysql
通过pymysql进行连接
首先 右击此电脑 点击管理 在服务中 打开mysql服务(如图)
然后再在mysql终端里输入密码。
显示打开成功。
ps:数据库中的表是已准备好的
接下来 在parcharm里 用pymysql进行连接:
try:
# 进行连接
connect_db = pymysql.connect(host="localhost", user="root", password="xxxxxx",charset='utf8',database="demo")
print("successful")
except:
print('failed')
由于我用pymysql是1.0.2版本的 需要填写6个参数
(host="localhost", user="root", password="123456",charset='utf8',database="demo",port=3306)
分别代表本地名,用户名,密码,编码类型,数据库名和端口名
这个时候进行连接如果显示successful则表示连接成功
获取游标
cur1 = connect_db.cursor()
编写数据库指令
sql_str = '''select * from goods'''
执行数据库指令(此处为查询)
row_count = cur1.execute(sql_str)
print(f'查询到:',row_count,'条记录')
获取一条结果
reuslt = cur1.fetchone()
print(reuslt)
获取多条结果:
reuslt = cur1.fetchall()
获取指定条数结果(4条)
reuslt = cur1.fetchmany(4)
关闭游标与数据库连接
cur1.close()
connect_db.close()
获得查询结果:
此部分全部代码:
import pymysql
try:
# 进行连接
connect_db = pymysql.connect(host="localhost", user="root", password="xxxxxx",charset='utf8',database="demo")
print("successful")
except:
print('failed')
# 获取游标
cur1 = connect_db.cursor()
cur2 = connect_db.cursor()
# 操作数据
# 写数据库操作指令
sql_str = '''select * from goods'''
# 执行sql语句
row_count = cur1.execute(sql_str)
print(f'查询到:',row_count,'条记录')
print('*' * 20)
#获取一条查询结果
reuslt = cur1.fetchone()
print(reuslt)
print('*' * 20)
# 获取指定条数的记录
reuslt = cur1.fetchmany(4)
for t in reuslt:
print(t)
print('*' * 20)
# 获取所有数据
reuslt = cur1.fetchall()
for t in reuslt:
print(t)
print('*' * 20)
# 新游表获取所有数据
row_count = cur2.execute(sql_str)
reuslt = cur2.fetchall()
for t in reuslt:
print(t)
print('*' * 20)
# 关闭游标
cur1.close()
cur2.close()
# 关闭数据库对象
connect_db.close()
插入,删除和更新类似,代码展示(插入) :
import pymysql
try:
con = pymysql.connect(host='localhost',user='root',password='xxxxxx',charset='utf8',database='demo')
print('成功连接数据库')
except:
print('连接失败')
cur1 = con.cursor()
# 插入语句
sql_str = '''insert into goods(name,cate_id,brand_id) value('Macbook PRO',1,1);'''
# 执行
cur1.execute(sql_str)
# 提交
con.commit()
# 关闭游标
cur1.close()
# 关闭连接
con.clos
但是多了一 个:con.commit () 因为:
'''
在给数据库 增删改时会在默认的事物环境中进行操作,操作完成后,要进行手动提交操作,如果不提交 程序默认操作为回滚
刚才操作的过程将不会被记录
事物的提交操作 由数据库连接对象来完成
'''
删除:
sql_str = '''delete from goods where id = 25;'''
通过py可以对表进行一个多条数据的插入:
原理很简单,一个for in循环即可:
# 开启自动提交
conn.autocommit(True)
cur1 = conn.cursor()
sql_str = '''insert into test_index values(%s,%s)'''
# 如果自动提交开启的话 需要手动开启事物
# conn.begin()
for i in range(10001):
s = f'data-{i}'
cur1.execute(sql_str,[i,s])
部分结果展示:
mysql注入问题的参数解决:
执行中写入第二个参数即可 如图:
# 让用户输入数据进行查询
select_id = input('请输入一个查询的id:')
# sql 注入问题产生的原因:
# 查询时利用sql的合法规则 查询到了不应该得到的数据,称为sql注入问题
# sql_str = '''select * from goods where id = %s;''' % select_id
# 安全版
sql_str = '''select * from goods where id = %s;'''
print(sql_str)
# 执行 利用excute的第二个参数,来解决sql的注入问题
cur1.execute(sql_str,(select_id))
result = cur1.fetchall()
print(result)