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. Scrum Meeting 0425

    零.说明 日期:2021-4-25 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成登录.注册A ...

  2. python3中的bytes和string

    原文链接:https://www.cnblogs.com/abclife/p/7445222.html python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分.文本总是 ...

  3. 设计模式 - Bridge 桥模式

    Bridge桥模式也属于"的单一职责"模式中的典型模式.问题描述:我们绘制图形时,图形可以有不同形状以及不同颜色,比如圆形可以是红的,绿的,方形可以是红的绿的,如果用代码来描绘这些 ...

  4. 从零开始的DIY智能家居 - 基于 ESP32 的土壤湿度传感器

    前言 自从上次做了那个 甲醛传感器 和 水浊度传感器 之后开始尝到智能家居的甜头了,这两东西有没有用我不知道,但是没事的时候掏出手机瞄两眼,看着就让人很安心( ̄︶ ̄). 于是懒惰的我开始琢磨把给植物浇 ...

  5. 51nod_1006 最长公共子序列,输出路径【DP】

    题意: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...

  6. Cannot load module file xxx.iml的两种解决方法

    一. 一种是点击左上角File,然后点击Invalidate Caches / Restart...,弹出对话框再点击Invalidate and Restart等待工程重新加载,问题就解决了. 二. ...

  7. 了解php数据库常用语法增删改查

    数据库基本语法 MySQL增:insert into 表名 (字段1,...,字段n) values (值1,...,值n) MySQL删:delete from 表名 where 条件 MySQL改 ...

  8. uni-app nvue页面动态修改导航栏按钮

    话不多说上代码 let pages = getCurrentPages() let page = pages[pages.length - 1]; let currentWebview = page. ...

  9. 9组-Alpha冲刺-2/6

    一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15534079.html 小组人数: 8 二.冲刺概况汇报 谢小龙 过去两天 ...

  10. Mac下Shell脚本使用学习笔记(二)

    参考文献 Shell 教程 MAC常用终端命令行 Mac下Shell脚本使用 (7)Shell echo命令: 命令格式:echo string ①显示普通字符串:echo "It is a ...