day43

it2022-05-09  27

自己总结内容:     一:在python中连接mysql;   1.   在终端cmd 中输入 pip3 install  pymysql       2.   在pycham中输入以下            import pymysql     连接mysql服务器    conn = pymysql.connect(host="localhost",user="root",      password="123",database="db1",charset="utf8")    host可以是主机名,可以是主机地址,user为用户名 ,database为要连接的数据库,charset为字符编码     建立一只手,从服务器中取数据    #cursor = conn.cursor()  如果括号中没指定,他取出来的数据是以元组类型显示,无法更好的见名知意    cursor = conn.cursor(cursor=pymysql.cursor.DictCursor)  通常采用字典这种方式,更好的知道数据的内容        利用sql语句来完成对数据库的操作    sql = "select * from student where id> %s" % (12,)        1: 函数方法功能体      ......       功能方法结束        cursor.execute(sql)        把sql语法提交给服务器     2:删除和更新的时候需要事务提交commit    conn.commit()   查找的时候不需要此功能    #res = cursor.fetchone()     获得一条数据    #res = cursor.fetchmany(10)  获得许多条数据 即括号内的数据    res = cursor.fetchall()      获得全部数据                         这样得到的数据都是列表里面套字典    print(res)               打印一下这个数据    cursor.close()           关闭手这只工具    conn.close()   关闭连接        案列:        向t2表中插入10条数据     import pymysql     import random     # 连接mysql服务器a     conn = pymysql.connect(host='localhost', user='root', password='123', database='t123', charset='utf8')     cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)     sql = 'insert into t2 (name,age) values (%s,%s)'     data = []     for i in range(10):      num = random.randrange(0, 10)      data.append(('root' + str(num), 'root' + str(num) + '@qq.com'))     cursor.executemany(sql, data)  #提交多条     conn.commit()     res = cursor.fetchall()     print(res)     cursor.close()     conn.close()    import mysql  改表:  分组:select id,name from 表名 where 条件1 and 条件2 group by 分组的列名 having 分组后的二次筛选 limit 限制取几条    多表连接查询:左连接 union 右连接     ===>全连接     显示的是有对应关系的数据, 还显示两张表中彼此没有对应关系的数据     inner join ...on... #内连接     只是连接有对应关系的两张表     left join ...on...#左连接  显示有对应关系的数据,且显示左表中没的对应关系的数据 即左表数据全部显示,右边表数据无关系的不显示     right join ...on...#右连接      显示有对应关系的数据,且显示右表中没的对应关系的数据 即右表数据全部显示,左表数据无关系的不显示     思路先连表,在查询     多表连接可以不断的和虚拟表连接    表连接完成再有条件,再有分组 再有二次筛选 再有排序 再有限制取几条  数据库备份:     语法:      mysqldump -h 服务器 -u用户名 -p密码 数据库名 >备份文件.sql      #示例:      #单库备份      mysqldump -uroot -p123 db1 > db1.sql      mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql      #多库备份      mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql      #备份所有库      mysqldump -uroot -p123 --all-databases > all.sql  sql注入:字符串的拼接关系所致,用特殊符号把sql语句进行了注释,所以形成了安全问题          在服务端防止sql注入问题,不要自己拼接字符串,让pymysql去拼接,用execute()来传值,把需要的值写在他的括号里面    案例;    import mysql    conn = pymysql.connect(host='localhost', user='root', password='123', database='t123', charset='utf8')    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)    inp_user = input("请输入用户名:").strip()    inp_pwd = input("前输入密码:").strip()    sql = "select * from yy where name=%s and pwd = %s"    print(sql)   在这里就可以用execute来解决sql注入带来的问题    res = cursor.execute(sql, (inp_user, inp_pwd))      #在这里传值,注意括号,解决了sql注入    print(res)    if res:     print("登录成功")    else:     print("登录失败")    cursor.close()    conn.close()         在表中添加数据 前提是在pycham中用语法添加数据    import mysql    conn = pymysql.connect(host='localhost', user='root', password='123', database='t123', charset='utf8')    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)    sql = "insert into yy(name,pwd) values (%s,%s)"          添加数据                   *******    print(sql)    rows = cursor.execute(sql, ('张无忌', "234"))                        ***************    print(rows)     #data = ['name':'asa','ggg':123]     #rows = cursor.executemany(sql,data)                #插入多条数据    #rows = cursor.execute('update yy set name="sb" where pwd="pwdr"')     修改数据     #print(rows)    conn.commit()        #只有执行commit 这条增加的数据才会正真的添加到表中   ****************    cursor.close()    conn.close()  存储引擎:      create table t1(    id int auto_increment primary key,    name varchar(32) not null default ''   )engine=Innodb charset=utf8;      分类: (****************)    Innodb     1.(默认版本包含5.5)     2.支持事务     3.不支持全文索引     4.索引和数据都是在同一个文件中, .ibd       表的结构实在.frm文件中    MyIsam     1.(默认版本5.5以下 5.3)     2.不支持事务     3.支持全文索引     4..frm: 表结构       .MYD: 表数据       .MYI: 表索引                memory         全文索引:     sphinx     索引:      作用: 加快查询的速度      类比: 新华字典的目录, 可以将索引理解成一个特殊的文件, 然后如果没有这个文件的话, 查询是从前到后查找数据的,       如果有这个文件的话, 会按照一种特殊的数据结构(二叉树)查找数据      分类:    主键索引: 加快查询 + 不能重复 + 不能为空  primary key    唯一索引: 加快查询 + 不能重复   unique(列名)     联合唯一索引: 加快查询 + 不能重复 unique(列名1,列名2)    普通索引: 加快查询    index('列名')         创建:        主键索引:     第一种:      create table t1(       id int auto_increment primary key,       name varchar(32) not null default ''      )engine=Innodb charset=utf8;     第二种:      alter table t1 change id id int  auto_increment primary key;          唯一索引:         第一种:      create table t1(       id int auto_increment primary key,       name varchar(32) not null default '',       unique ix_name ('name')      )engine=Innodb charset=utf8;           第二种:      create unique index 索引名称(ix_name) on 表名(t1)(name);      create unique index 索引名称(ix_name_age) on 表名(t1)(name,age);        普通索引:         第一种:      create table t1(       id int auto_increment primary key,       name varchar(32) not null default '',       index ix_name ('name')      )engine=Innodb charset=utf8;           第二种:      create  index 索引名称(ix_name) on 表名(t1)(name);        删除:     drop 索引名称(ix_name) on 表名(t1);        场景:    使用频繁的列上加一个索引        索引的缺点:        版本5.3以下:     删除和修改的速度就变慢了        版本5.5以上:     删除和修改的速度不是特别的慢       create table t12(     id int auto_increment primary key,     name varchar(32) not null default '',     email varchar(32) not null default ''    )engine=Innodb charset=utf8;          索引的使用:        explain 工具        查看sql语句是否用的上索引, 或者查看sql执行效率的工具        给执行的SQL语句出一个报告, 通过此报告来判断sql语句的执行效率和效果        ES (elasticsearch )    SQL语句的规则:         - 不建议使用 like 进行搜索     - 组合索引最左前缀      如果组合索引为:(name,email)      where name and email       -- 使用索引      where name                 -- 使用索引      where email                -- 不使用索引       慢日志查询(slow log):        日志文件: 记录了执行速度特别慢的SQL语句        开启的步骤:     1. show variables like '%query%';          2. set global long_query_time = 1; 设置慢查询的时间     3.  slow_query_log = ON                                                      4.  slow_query_log_file  = E:\program\mysql-5.6.44-winx64\data\oldboy-slow.log   普通日志记录(general  log):        SQL审计 (记录sql的操作语句)

转载于:https://www.cnblogs.com/Fzhiyuan/p/11042866.html


最新回复(0)