connect 模块下载

https://dev.mysql.com/downloads/connector/python/

import mysql.connector
con = mysql.connector.connect(
host = "192.168.111.153",
port = "3306",
user = "quan",
password = "2004",
database = "mon"
) con.close()

import mysql.connector
config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"mon"
} con = mysql.connector.connect(**config)

import mysql.connector
config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"mon"
} con = mysql.connector.connect(**config) cursor = con.cursor()
sql = "SELECT id,classname FROM class;"
cursor.execute(sql)
for one in cursor:
print(type(one))
print(one[0],one[1]) sql2 = "SHOW TABLES"
cursor.execute(sql2)
for i in cursor:
print(i) 结果;
<class 'tuple'>
1 dada
<class 'tuple'>
2 jave
<class 'tuple'>
4 py
('ALT',)
('class',)
('class_type',)
('fa',)
('father',)
('joson',)
('nu',)
('numm',)
('nummm',)
('provices',)
('qqq',)
('son',)
('ss',)
('tp3',)
('tp4',)
('tp5',)
('tp6',)
('user',)

实现sql注入;

SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 

具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

防止:

1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。 

2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。 

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。 

4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。
import mysql.connector
config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"mon"
}
con = mysql.connector.connect(**config)
ID = "1 OR 1 = 1"
CN = "1 OR 1 = 1"
sql = "SELECT COUNT(*) FROM class WHERE id ="+ID+" AND classname = "+CN;
cursor = con.cursor()
cursor.execute(sql)
print(cursor.fetchone()[0])
con.close() 结果:
3

编译成二进制还不能执行,需要传入参数
传入参数之后二进制再进行执行,提高效率,不需要再分析磁盘这些步骤

输入的所有参数都是认为是字符串处理,不在分析,

import mysql.connector
config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"mon"
}
con = mysql.connector.connect(**config)
ID = "1 OR 1 = 1"
CN = "1 OR 1 = 1"
sql = "SELECT COUNT(*) FROM class WHERE id =%s AND classname = %s ";
cursor = con.cursor()
cursor.execute(sql,(ID,CN))#这里并没有给sql直接传入参数,而是让sql先编译成二进制再传入参数
print(cursor.fetchone()[0])
con.close() 结果:
0

con.commit()用于提交事务,connector不会为你自己提交
con.rollback()回滚事务

con in dir()判断con变量是否创建
import  mysql.connector

try:
con = mysql.connector.connect(
host="192.168.111.153",
port="3306",
user="quan",
password="2004",
database="mon"
)
con.start_transaction()#开启事务
cursor = con.cursor()#创建游标
sql = "INSERT INTO class(classname) VALUES (%s)"
cursor.execute(sql,("QQQQ",)) con.commit()
except Exception as e:
if "con" in dir():
con.rollback()
print(e)
finally:
if "con" in dir():
con.close()

结果:

import  mysql.connector

try:
con = mysql.connector.connect(
host="192.168.111.153",
port="3306",
user="quan",
password="2004",
database="mon"
)
con.start_transaction()#开启事务
cursor = con.cursor()#创建游标
sql = "DELETE FROM class WHERE id = %s"
cursor.execute(sql,(9,)) con.commit()
except Exception as e:
if "con" in dir():
con.rollback()
print(e)
finally:
if "con" in dir():
con.close()

import mysql.connector.pooling

config = {
"host":"192.168.111.153",
"port":"3306",
"user":"quan",
"password":"2004",
"database":"mon"
}
try:
pool = mysql.connector.pooling.MySQLConnectionPool(
**config,
pool_size = 10
)
#因为连接池里面的连接不需要关闭,所以这里不用使用finaly
con = pool.get_connection()
con.start_transaction()
cursor = con.cursor()
sql = "UPDATE class SET classname = %s WHERE id = %s"
cursor.execute(sql,("javagai",2))
con.commit()
except Exception as e:
if "con" in dir():
con.rollback()
print(e)

import mysql.connector.pooling

config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"mon"
}
try:
pool = mysql.connector.pooling.MySQLConnectionPool(
**config,
pool_size = 10
)
con = pool.get_connection()
con.start_transaction() cursor = con.cursor()
sql = "DELETE class,user FROM class LEFT JOIN user ON class.id = user.cid "
cursor.execute(sql) con.commit() except Exception as e:
if "con" in dir():
con.rollback()
print(e)

结果:

import mysql.connector.pooling

config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"mon"
}
try:
pool = mysql.connector.pooling.MySQLConnectionPool(
**config,
pool_size=10
)
con = pool.get_connection()
con.start_transaction()
cursor = con.cursor()
sql = "INSERT INTO class VALUES (%s ,%s)"
sql_list = [[1,"QQQ"],[2,"ZZZ"],[3,"QQQ"]]
cursor.executemany(sql,sql_list) con.commit() except Exception as e:
if "con" in dir():
con.rollback()
print(e)

结果;

 
实践111111111111111
将class_type表里面pid大于平均pid的信息导入到class_type_new里面,并将信息里面的name改为END

import mysql.connector.pooling

config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"mon"
}
try:
pool = mysql.connector.pooling.MySQLConnectionPool(
**config,
pool_size=10
)
con = pool.get_connection()
con.start_transaction() cursor = con.cursor()
sql = "DROP TABLE class_type_new"
cursor.execute(sql)
#创建的新表
sql = "CREATE TABLE class_type_new LIKE class_type"
cursor.execute(sql)
#获取平均id
sql = "SELECT AVG(pid) AS avg FROM class_type"
cursor.execute(sql)
temp = cursor.fetchone()
avg = temp[0]#平均id保存到变量
#查找大于平均id的id
sql = "SELECT id FROM class_type WHERE pid >=%s "
cursor.execute(sql,(avg,))
temp1 = cursor.fetchall()#结果保留到变量[(5,), (6,), (7,), (8,), (9,), (10,)]
#将原来表里面符合平均id的复制到新表
do_id = ""
for num in range(len(temp1)):
id = str(temp1[num][0])
if num != len(temp1) - 1:
id = id + ","
do_id += id
sql = "INSERT INTO class_type_new SELECT * FROM class_type WHERE id IN (" + do_id +")"
cursor.execute(sql)
#将原来的表删除
sql = "DELETE FROM class_type WHERE id IN (" + do_id + ")"
cursor.execute(sql)
#将软来的name改为END
sql = "UPDATE class_type_new SET name = %s"
cursor.execute(sql,("END",))
con.commit()
except Exception as e:
if "con" in dir():
con.rollback()
print(e)

结果:

实践22222222
往class_type_new里面加入两组数据,其中 id 为最大id+10

不能再本表查询结果作为本表插入数据

import mysql.connector.pooling

config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"mon"
} try:
pool = mysql.connector.pooling.MySQLConnectionPool(
**config,
pool_size=10
)
con = pool.get_connection()
con.start_transaction()
sql = "INSERT INTO class_type_new (" \
"SELECT MAX(id) + 10,%s,%s FROM class_type_new) UNION " \
"(SELECT MAX(id) + 20,%s,%s FROM class_type_new)"
cursor = con.cursor()
cursor.execute(sql,("DD",8,"EE",9))
con.commit() except Exception as e:
if "con" in dir():
con.rollback()
print(e)

结果:

python19 操作mysql的更多相关文章

  1. ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

  2. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  3. EF操作MySql

    EF的CodeFrist操作MySql的提前准备: 1.安装两个包:MySql.Data和MySql.Data.Entity,在VS中程序包管理器中添加2个包.(备注需要的VS2015,并且EF6支持 ...

  4. .NET Core 使用Dapper 操作MySQL

    MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...

  5. asp.net core 1.1 升级后,操作mysql出错的解决办法。

    遇到问题 core的版本从1.0升级到1.1,操作mysql数据库,查询数据时遇到MissingMethodException问题,更新.插入操作没有问题. 如果你也遇到这个问题,请参照以下步骤进行升 ...

  6. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

  7. Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  8. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  9. java分享第十七天-03(封装操作mysql类)

     JAVA操作mysql所需jar包:mysql-connector-java.jar代码: import java.sql.*; import java.util.ArrayList; import ...

随机推荐

  1. 零基础学习C语言入门必备知识

    今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...

  2. DMA实现采样数据的直接搬运存储

    尝试了下STM32的ADC采样,并利用DMA实现采样数据的直接搬运存储,这样就不用CPU去参与操作了. 找了不少例子参考,ADC和DMA的设置了解了个大概,并直接利用开发板来做一些实验来验证相关的操作 ...

  3. 万能构造解决Rolle中值问题

    只要原函数是两个函数的乘积形式,皆可此构造.

  4. 字符串与模式匹配算法(四):BM算法

    一.BM算法介绍 BM算法(Boyer-Moore算法)是罗伯特·波义尔(Robert Boyer)和杰·摩尔(J·Moore)在1977年共同提出的.与KMP算法不同的是,BM算法是模式串P由左向右 ...

  5. 认识Linux系统中的inode,硬链接和软链接

    在学习和创建软链接遇到了一点问题,总结一下: 在当前文件夹下面建立了两个临时文件夹tempdir1和tempdir2,然后在tempdir2里面创建了一个hello文件,然后用指令ln -s temp ...

  6. hdu 1069 Monkey and Banana(记忆搜)

    题意: N(不超过30)种木块,每种木块有长.宽.高x,y,z. 木块A可以搭在木块B上当且仅当A的底面长和宽都分别小于B的顶面的长与宽,即不能有超出B的部分. 问垒起来的"木块塔" ...

  7. docker 启动tomcat后,外部访问报HTTP Status 404 – 未找到报错解决

    1.检查防火墙,防火墙是关闭的状态 2.检查docker中的tomcat 2.1  使用命令:docker container ps ,查看tomcat运行id 2.2 进入docker的tomcat ...

  8. 微服务之十四如何在 Ocelot 网关中配置多实例 Swagger 访问

    一.介绍 当我们开发基于微服务的应用程序的时候,有一个环节总是跳不过去的,那就是要创建 WebApi,然后,我们的应用程序基于 WebApi 接口去访问.在没有 Swagger 以前,我们开发好了 W ...

  9. MySQL到底能否解决幻读问题

    先说结论,MySQL 存储引擎 InnoDB 在可重复读(RR)隔离级别下是解决了幻读问题的. 方法:是通过next-key lock在当前读事务开启时,1.给涉及到的行加写锁(行锁)防止写操作:2. ...

  10. mongodb安装教程(一)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/fengtingYan/article/de ...