mysql--(python23)

1. MySQL

关系型数据库
使用pymysql包进行操作

1.1 连接查询操作

注意:

首先就是数据库的远程连接,假若是本地得到连接就是localhost
连接的关闭close
还有就是pycharm的pymysql包的安装

在这里插入图片描述

在这里插入图片描述

"""
ubuntu的MySQL在windows进行连接
grant all on *.* to root@'%' identified by '123456' with grant option;
修改配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address		= 0.0.0.0

一个数据库连接对象可以创建多个游标对象
一般情况下,同一时刻,只会建立一个游标进行操作
"""


import pymysql

# 1.创建数据库连接对象
connect_db = pymysql.connect(host='192.168.3.88', port=3306, user='root', password='123456', charset='utf8',
                             database='jing_dong')

# 2.获取游标对象
cur = connect_db.cursor()

# 3.编写数据库的操作指令
# sql_str = '''select * from goods where name = "超极本" '''
sql_str = '''select * from goods'''

# 3.2执行
row_count = cur.execute(sql_str)
print('查询到的记录:', row_count)

# 3.3获取一条的查询结果
result = cur.fetchone()
print(result)
print("*" * 10)
# 3.4 获取指定的
result1 = cur.fetchmany(4)
for t in result1:
    print(t)

print("*" * 20)
# 3.5 获取所有的数据
result2 = cur.fetchall()
for v in result2:
    print(v)
# 4.关闭游标
cur.close()

# 5.关闭数据库
connect_db.close()

1.2 插入数据

注意:

这个时候就涉及到了数据库的事务
操作完成了需要commit提交,这个是connect的操作,不是游标的操作

"""

"""

# 导包
import pymysql

connect_db = pymysql.Connect(host='192.168.3.88', port=3306, user='root', password='123456', charset='utf8',
                             database='jing_dong')

cur = connect_db.cursor()

# 数据的插入
sql_str = '''insert into goods(name,cate_id,brand_id) values('神州笔记本',1,1);'''

cur.execute(sql_str)

# 事务,执行以后commit 提交是数据库对象的凑哦,不是游标的操作
# 提交要放在执行以后
connect_db.commit()

cur.close()
connect_db.close()

1.3 更新与删除操作

import pymysql

connect_db = pymysql.connect(host='192.168.3.88', port=3306, user='root', password='123456', charset='utf8',
                             database='jing_dong')

cur = connect_db.cursor()

# 更新
# sql_str = ''' update goods set cate_id=8 where id =22; '''

# 删除
sql_str = ''' delete from goods where id = 21; '''

cur.execute(sql_str)

connect_db.commit()

cur.close()

connect_db.close()

2. Sql注入问题

2.1 sql注入的产生

import pymysql

connect_db = pymysql.connect(host='192.168.3.88', port=3306, user='root', password='123456', charset='utf8',
                             database='jing_dong')

cur = connect_db.cursor()

select_id = input('请输入要查询的id:')
# 当我们输入 1 or 2的时候就会把所有的信息打印出来,解决办法,参数列表
sql_str = ''' select * from goods where id = %s; ''' % select_id

cur.execute(sql_str)

result = cur.fetchall()
for t in result:
    print(t)


cur.close()

connect_db.close()

解决:利用execute方法的第二个参数

import pymysql

connect_db = pymysql.connect(host='192.168.3.88', port=3306, user='root', password='123456', charset='utf8',
                             database='jing_dong')

cur = connect_db.cursor()

select_id = input('请输入要查询的id:')
# 当我们输入 1 or 2的时候就会把所有的信息打印出来,解决办法,参数列表
sql_str = ''' select * from goods where id = %s; '''


# 元组的方式,也可以使用列表和字典,但是不推荐字典的方式
# cur.execute(sql_str,(select_id,))
parms = (select_id,)
cur.execute(sql_str,parms)

# 列表
# parms = [select_id]
# cur.execute(sql_str,parms)

result = cur.fetchall()
for t in result:
    print(t)


cur.close()

connect_db.close()

3.mysql的一些使用

3.1 索引的建立

查看索引

show index from 表名;

创建索引

alter table 表名 add index 索引名称(字段名称);
alter table goods add index catex_id(caye_id);

删除索引

alter table goods drop index catex_id;

性能的测试:

-- 开启运行时间监测:
set profiling=1;
-- 查找第1万条数据ha-99999
select * from test_index where title='ha-99999';
-- 查看执行的时间:
show profiles;
-- 给title字段创建索引:
alter table test_index add index (title);
-- 再次执行查询语句
select * from test_index where title='ha-99999';
-- 再次查看执行的时间
show profiles;

联合索引

alter table teacher add index (name,age,sex);

最左原则
这个时候只会有name,(name,age),(name,age,sex)这三个联合索引

查看查询的次数

desc 查询语句;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安有故里y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值