一、下载并导入pymysql

pip install pymysql && import pymysql

   db=pymysql.connect(host='192.168.253.10',user='root',password='',db='mysql',port=)   #如果报错host大概率因为没设置允许第三方登陆
cur=db.cursor()
cur.execute('show tables;') #注意execute书写
db.commit() #提交才生效
result=cur.fetchall() #取数据,fetchone(n)获取下表对应的数据
print(result)

实验:用python执行sql语句测试时间

1)

import pymysql
db=pymysql.connect(host='192.168.253.10',user='root',password='',db='zzz',port=)
cur=db.cursor()
for i in range():
print(i)
cur.execute("insert into ss values(0,'name-%s')"%i) #必须用双引号
db.commit() #必须提交事务,否则无效,并且置顶格,将所有循坏写入的步骤当作一个事务提交。
result=cur.fetchall()
print(result)

2) python执行完毕后,去linux主机登陆查看是否插入成功。

MariaDB [zzz]> select count(*) from ss;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+

或者 select * from ss  limit  10;                 #注意分页查看,因为插入数据多

3) 查看profiling的状态,,如果是off改成ON

show variables  status like  '%profiling%' ;

+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| have_profiling | YES |
| profiling | off |
| profiling_history_size | |

临时性更改:set profiling =1;                  #重启等会重置

永久性更改,写进/etc/my.cnf.d/server.cnf 的server模块下。

4)执行命令查看profiles状态的duration列,然后添加索引后执行相同命令再来查看,对比前后耗时,可以得知索引的作用。

MariaDB [zzz]> show profiles;
+----------+------------+----------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+----------------------------------------+
| | 0.00319622 | show variables like '%profiling%' |
| | 0.00165140 | select * from ss where name='name-123' | 此步骤时间同8作比较
| | 0.00026767 | show profiling |
| | 0.02831208 | create index n_i on ss(name) | #创建完索引后
| | 0.00090224 | select * from ss where name='name-123'   此步骤时间同5作比较发现快了几十倍,插入量越多效果越明显

至此,python执行sql语句实验完成。

二、外键

  • 如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表)

  • 对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错

#添加外键

alter table 子表名 add  constraint  外键名  foreign key (关键词)  references  夫表名(对应关键词);

#删除外键

alter table students drop foreign key 外键名字;

在学生表上创建外键指向班级表(表见上一博客)

MariaDB [zzz]> alter table students add constraint fk foreign key(cls_id) references classes(id);
ERROR (): Cannot add or update a child row: a foreign key constraint fails (`zzz`.`#sql-acc_13`, CONSTRAINT `fk` FOREIGN KEY (`cls_id`) REFERENCES `classes` (`id`))

此报错是因为外键的约束作用,学生表的id有3、4、5但是班级表的id只有1,2;解决此报错要么学生表删除id为{3,4,5}的数据,要么增加班级表id为3,4,5的数据(总之使两个表的id对应上)

我们这里选择删除学生表的3,,5数据
MariaDB [zzz]> delete from students where id >;
Query OK, rows affected (0.003 sec)

再执行:

alter table students add constraint fk foreign key(cls_id) references classes(id) ;

show create table  students(子表名);     #查看外键是否添加成功

同理,只要两个表之间添加了外键约束,插入、修改删除、数据都会受彼此约束。

例如,由于父表id只有1和2,我们现在往子表students里面添加数据:

MariaDB [zzz]> insert into students values(,'小明',,180.00,,3,);       #插入id=3报错
ERROR (): Cannot add or update a child row: a foreign key constraint fails (`zzz`.`students`, CONSTRAINT `fk` FOREIGN KEY (`cls_id`) REFERENCES `classes` (`id`))

解决方法为,先添加父表的id=3的数据。

使用python执行sql语句和外键解析的更多相关文章

  1. python执行 sql 语句

    写的很好 import pymysql conn = pymysql.connect(host = '127.0.0.1',port = 3306,user = 'root',passwd = '12 ...

  2. python执行sql语句

    dbname = 'db.sqlite3' dbpath = 'D:\\pyweb\\sf\\db.sqlite3' csvpath = pspath #custom thread number tn ...

  3. Python 一键拉取Git分支源码自动解析并执行SQL语句

    基于Python实现自动拉取Git分支源码自动解析并执行SQL语句 by:授客 QQ:1033553122 1.代码用途 开发过程中,研发人员会提交SQL更新脚本到Git源码库,然后测试负责去拉取这些 ...

  4. python之django直接执行sql语句

    python之django直接执行sql语句 sql = 'select * from stu' info = 模型类.objects.raw(sql)

  5. Python MySQLdb 执行sql语句时的参数传递

    使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法. 1.不传递参数 conn = MySQLdb.connect(user="root",passwd=&qu ...

  6. Entity Framework——执行sql语句

    EF版本:6.0.0 EF对大量数据或多表连接一次操作耗时较大,或要求响应时间尽可能小,因此采用EF框架执行SQL语句的方案 1DbContext.Database 这个类包含了大量的操作方法,见截图 ...

  7. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  8. Hibernate执行sql语句

    Hibernate执行sql语句:BasicServiceImpl basicServiceImpl = new BasicServiceImpl();String hql = "selec ...

  9. linq直接执行sql语句

    1.ExecuteQuery方法 看命名,我们很容易联想到ado.net里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该&quo ...

随机推荐

  1. [Git] 007 三棵树以及向本地仓库加入第一个文件

    1. "三棵树" 1.1 前言 理论上要稍稍复杂一点 我在这里说得简化一点 顺道挖个坑 下回具体介绍 坑号编码:Git07-1 1.2 看图 1.3 简介 树左:工作区(平时写代码 ...

  2. [AGC035F]Two Histograms

    Description 你有一个 \(N\) 行.\(M\) 列的.每个格子都填写着 0 的表格.你进行了下面的操作: 对于每一行 \(i\) ,选定自然数 \(r_i\ (0 ≤ r i ≤ M ) ...

  3. 探究Javascript模板引擎mustache.js使用方法

    这篇文章主要为大家介绍了Javascript模板引擎mustache.js使用方法,mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后 ...

  4. Malware分析

    //文章来源:http://www.2cto.com/Article/201312/265217.html by Kungen@CyberSword 想要查找恶意样本,首先要知道查找样本所需的基本信息 ...

  5. 【推荐系统】知乎live入门

    参考链接: 知乎推荐系统live:姚凯飞推荐系统live 目录 1.推荐概览与框架 2.细节补充 3.召回 4.排序 5.常用技能与日常工作 5.用户画像-特征工程 6.相关经验 7.推荐考试拿分路径 ...

  6. CentOS 系统开启防火墙,屏蔽IP,解决DDOS攻击

    刚才发现网站特别慢,然后看了一下服务器状态 CPU 负载100%. 然后看了下网络,发现一个IP一直在请求本服务器的 443 端口,就是本站. 然后在终端通过 iftop 命令(一个流量健康软件,如果 ...

  7. readlink 查看符号链接的文件的内容

    1. 命令功能 readlink 查看软链接文件里的真实内容. 2. 语法格式 readlink [option]  file 参数 参数说明 -f 后跟软链接文件 3. 使用范例 范例1 查看文件链 ...

  8. (转)nginx+redis实现接入层高性能缓存技术

    转自:https://blog.csdn.net/phil_code/article/details/79154271 1. OpenRestyOpenResty是一个基于 Nginx与 Lua的高性 ...

  9. 创建entityManager

    1 需要persistence.xml 完全通过属性配置没成功 <persistence xmlns="http://java.sun.com/xml/ns/persistence&q ...

  10. js实时计算价格

    //通过数量,单价的输入,实时显示总价 $("#number,#price").on("input",function(e){ $("#totalPr ...