python19 操作mysql
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的更多相关文章
- ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- EF操作MySql
EF的CodeFrist操作MySql的提前准备: 1.安装两个包:MySql.Data和MySql.Data.Entity,在VS中程序包管理器中添加2个包.(备注需要的VS2015,并且EF6支持 ...
- .NET Core 使用Dapper 操作MySQL
MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...
- asp.net core 1.1 升级后,操作mysql出错的解决办法。
遇到问题 core的版本从1.0升级到1.1,操作mysql数据库,查询数据时遇到MissingMethodException问题,更新.插入操作没有问题. 如果你也遇到这个问题,请参照以下步骤进行升 ...
- 练习:python 操作Mysql 实现登录验证 用户权限管理
python 操作Mysql 实现登录验证 用户权限管理
- Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- java分享第十七天-03(封装操作mysql类)
JAVA操作mysql所需jar包:mysql-connector-java.jar代码: import java.sql.*; import java.util.ArrayList; import ...
随机推荐
- django通过管理页上传图片
1.配置目录 新建上传录.static/medis 2.设置上传文件保存路径 # setting.py中设置上传文件路径static/media MEDIA_ROOT = os.path.join(B ...
- LeetCode:BFS/DFS
BFS/DFS 在树专题和回溯算法中其实已经涉及到了BFS和DFS算法,这里单独提出再进一步学习一下 BFS 广度优先遍历 Breadth-First-Search 这部分的内容也主要是学习了labu ...
- [对对子队]团队任务拆解Alpha
Alpha阶段主要目标 完成游戏场景的基本实现(不要求美术资源) 完成游戏UI的基本实现(不要求美术资源) 制作第一部分的关卡(顺序语句,制作3-5关) 完成第一部分关卡和游戏基本逻辑的测试 任务分解 ...
- find&正则表达式
标准的正则表示式格式 常用元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ ...
- mysql分表之后怎么平滑上线?
分表的目的 项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询数据变慢,而且由于表的锁机制导致应用操作也受到严重影响,出现了数据库性能瓶颈. 当出现这种情况时,我们可以考虑 ...
- HMS Core Keyring携手航班管家和高铁管家,打造美好出行体验
高铁管家是国内最早⽀持⼿机⽀付购买⽕⻋票App之⼀,日活用户超380万,为⽤户提供一站式铁路出⾏服务.高铁管家母公司--深圳市活⼒天汇科技股份有限公司是国内智能⼤出⾏的开创者,先后推出航班管家.⾼铁管 ...
- 第01课 OpenGL窗口(2)
下一段包括了所有的绘图代码.任何您所想在屏幕上显示的东东都将在此段代码中出现.以后的每个教程中我都会在例程的此处增加新的代码.如果您对OpenGL已经有所了解的话,您可以在 glLoadIdentit ...
- 【http】https加速优化
目录 前言 HTTPS 的连接很慢 https 步骤简要划分 握手耗时 证书验证 CRL OCSP 硬件优化 软件优化 软件升级 协议优化 证书优化 会话复用 会话票证 预共享密钥 前言 主要记录 h ...
- 开发笔记-----Ajax 基础使用
一.GET 方式的用法: 1 <!--html --> 2 <div class="layui-form"> 3 <div class="l ...
- 释放 cached 内存
巡检服务器发现内存可用很少了 top 命令查看是没有占用大内存的进程,cached特别大,释放cached就可以了 可用内存= free + buffers + cached 以下方法可以释放cach ...