一.python 操作mysql

import pymysql

'''

# 1.基本语法

# (1) 连接数据库

# conn = pymysql.connect(host = "ip地址",user = "用户",password = "密码",database = "数据库",charset = "字符集",port = "端口号")

# 至少填写前4个参数

conn = pymysql.connect(host = "127.0.0.1",user = "root",password="123456",database = "db5",charset="utf8",port=3306)

# (2).创建游标对象,该对象执行sql相关方法

cursor = conn.cursor()

# (3).执行sql语句

sql = "select * from employee"

# (如果是查询,返回查到的所有条数)

res = cursor.execute(sql)

print(res)

# (4) 获取查询出来的数据 fetchone 只获取一条数据

res = cursor.fetchone()

print(res)

#获取当前数据版版本号

res = cursor.execute("select version()")

print(res)

data = cursor.fetchone()

print("版本号",data)

# (5) 释放游标对象

# cursor.close()

# (6) 关闭数据库连接

conn.close()

'''

# 2.创建/删除 数据表

'''

conn = pymysql.connect(host = "127.0.0.1",user = "root",password="123456",database="db5")

# 创建游标对象 通过这个对象操作数据库

cursor = conn.cursor()

sql1 =  """

create table myt10(

id int unsigned primary key auto_increment,

first_name char(10) not null,

last_name char(10) not null,

age int unsigned,

sex tinyint,

money float

)

"""

# 准备sql语句

sql2 = "desc myt9"

# 执行sql语句

# cursor.execute(sql1)

cursor.execute(sql2)

# 获取一条数据

# data = cursor.fetchone()

# 获取所有数据

data = cursor.fetchall()

print(data) #('id', 'int(10) unsigned', 'NO', 'PRI', None, 'auto_increment')

try:

# sql3 = "drop table myt1011111"

sql3 = "drop table myt10"

res = cursor.execute(sql3)

print(res)

except:

pass

print(33344)

# 释放游标对象

cursor.close()

# 关闭远程数据库连接

conn.close()

"""

(

('id', 'int(10) unsigned', 'NO', 'PRI', None, 'auto_increment'),

('first_name', 'char(10)', 'NO', '', None, ''),

('last_name', 'char(10)', 'NO', '', None, ''),

('age', 'int(10) unsigned', 'YES', '', None, ''),

('sex', 'tinyint(4)', 'YES', '', None, ''),

('money', 'float', 'YES', '', None, '')

)

"""

'''

# (3)事务处理

# 1.基本语法

# 连接数据库

conn = pymysql.connect(host = "127.0.0.1",user = "root",password="123456",database = "db5",charset="utf8",port=3306)

# 创建游标对象,该对象执行sql相关方法

cursor = conn.cursor()

# 1 .开启事务  通过pymysql 操作数据库,默认开启事务,需要最后通过commit进行提交数据;

sql1 = "begin"

sql2 = "select * from employee limit 3"

sql3 = "update employee set age = 39 where id = 3"

sql4 = "commit"

cursor.execute(sql1)

cursor.execute(sql2)

cursor.execute(sql3)

# 最终需要通过commit提交事务,提交数据

cursor.execute(sql4)

# 释放游标对象

cursor.close()

# 关闭数据库连接

conn.close()

二.sql注入相关

import pymysql

""""""

# 1.sql 注入的问题

user = input("user>>:").strip()

pwd = input("password>>:").strip()

# sdfsd' or 1=1 -- sfdksjk

conn= pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db5",charset="utf8",port=3306)

cursor = conn.cursor()

sql = "select * from usr_pwd where username = '%s'  and password = '%s' " % (user,pwd)

print(sql) #select * from usr_pwd where username = 'iuiuuyuy' or 1=1 -- sdfsdfs'  and password = ''

res = cursor.execute(sql)

print(res)

if res:

print("登录成功!")

else:

print("登录失败~")

# 释放游标对象

cursor.close()

# 关闭数据库连接

conn.close()

''''''

# 2.解决办法:

# 如果想用execute 的预处理功能 %s 不要在套一层引号了,但是如果是字符串的格式化,必须加引号.

user = input("user>>:").strip()

pwd = input("password>>:").strip()

conn= pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db5",charset="utf8",port=3306)

cursor = conn.cursor()

sql = 'select * from usr_pwd where username = %s  and password = %s '

# execute可以提前过滤sql语句,做一下预处理.方式sql注入.

print(sql)

res = cursor.execute(sql,(user,pwd))

if res:

print("登录成功")

else:

print("登录失败")

# 释放游标对象

cursor.close()

# 关闭数据库连接

conn.close()

三.python 操作mysql 增删改

import pymysql

"""

通过pymysql这个模块提交给mysql 服务器,默认开启事务

事务处理,必须要依赖commit来进行提交数据,也可以用rollback回滚到开始时候 的数据

不提交数据,默认回滚

提交数据 conn.commit()

回滚数据 conn.rollback()

execute executemany 如果执行的是增删改,返回的是受影响的行数

execute 如果执行的是查,返回的是查询到的数量;

"""

# 连接数据库

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db5")

# cursor=pymysql.cursors.DictCursor 把返回的数据变成字典,默认是元组;

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 1.增

# 执行sql语句

sql = """insert into myt9(first_name,last_name,age,sex,money) values(%s,%s,%s,%s,%s)"""

# execute只执行一条数据

res = cursor.execute( sql,( "马","巨强",74,1,8) )

# print(res)

# executemany执行多条数据 返回第一次插入的那条数据的id

# res = cursor.executemany(  sql, [("张","过程",88,0,2),("意","四",13,1,90),("罗","婷",18,1,100000),("黄","胸大",20,0,900)]  )

# print(res)

# 获取最后一条插入数据的id(一般常用订单号上)

print(cursor.lastrowid)

# 2.删

"""

sql = "delete from myt9 where id = %s "

res = cursor.execute(sql,(5))

if res:

print("删除成功")

else:

print("删除失败")

"""

# 3.改

"""

sql = "update myt9 set first_name = %s where  id = %s"

res = cursor.execute(sql,("王",9))

if res:

print("修改成功")

else:

print("修改失败")

"""

# 4.查 返回搜索的条数

sql2 = "select * from myt9"

res = cursor.execute(sql2)

print(res)

# 查询一条 fetchone()

data = cursor.fetchone()

print(data)

# 查询多条 fetchmany(查询的条数) 默认查一条,基于上一条查询,往下在查查2条

data = cursor.fetchmany(2)

print(data)

# 查询所有数据

data = cursor.fetchall()

print(data)

#[{'id': 9, 'first_name': '王', 'last_name': '巨强', 'age': 74, 'sex': 1, 'money': 8.0}]

for row in data:

first_name = row['first_name']

last_name = row['last_name']

age = row['age']

if row['sex'] == 0:

sex = "男"

else:

sex = "女"

money = row['money']

print("姓:{},名字:{},性别:{},年龄:{},收入:{}".format(first_name,last_name,sex,age,money))

# 可以选择查询的位置

sql3 = "select * from myt9 where id >= 20"

res = cursor.execute(sql3)

print(res)

data = cursor.fetchone()

print(data)

# 相对当前位置进行移动

cursor.scroll(7,mode="relative")  # 向后移动

print(cursor.fetchone())

cursor.scroll(-5,mode="relative") # 向前移动

print(cursor.fetchone())

# 绝对位置移动

cursor.scroll(0,mode="absolute")

print(cursor.fetchone())

conn.commit()

cursor.close()

conn.close()

MySQL 之与Python相关的更多相关文章

  1. redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐

    redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐 1.Redis 官方网站下载: http://redis.io/dow ...

  2. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  3. python学习道路(day12note)(mysql操作,python链接mysql,redis)

    1,针对mysql操作 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 设置密码 update user set password ...

  4. 计算机开放电子书汇总(包括二十多本python相关的图书教程)

    计算机开放电子书汇总(包括二十多本python相关的图书教程) https://github.com/it-ebooks/it-ebooks-archive 这个汇总包含了各种计算机相关的开放图书和文 ...

  5. 运行easy_install安装python相关程序时提示failed to create process

    运行easy_install安装python相关程序时提示failed to create process,因为安装了两个python,卸载了的那个目录没删除,删除了另外的python目录后这个问题就 ...

  6. 【导航】Python相关

    [博客导航] Python相关导航 [索引]Python常用资源(从新手到大牛) [任务]Python语言程序设计.MOOC学习 [笔记]Python集成开发环境——PyCharm 2018.3下载. ...

  7. 剑指offer用位运算实现两个数相加,及python相关的位操作

    题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution:    def Add(self ...

  8. python相关资料链接

    后续的博客更新,会涉及到很多的python及python的框架相关的内容,这里将自己收藏的一些关于python相关资料的链接做一个整理,算是一个导航索引吧... PS:其中有些链接对应的技术团队文章, ...

  9. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

随机推荐

  1. django模块导入/函数/中间件/MVC和MTV/CSRF

    目录 一:模块导入 二:函数 三:中间件 四:MVC和MTV 五:csrf 一:模块导入 第一种:继承 这里的母版更像是一个架子,子板都是定义的内容(如果多个页面中 ,存在相同的页面:这样我们可以抽到 ...

  2. celery参考

    1,https://www.wandouip.com/t5i377365/ 2,https://www.cnblogs.com/zhangmingcheng/p/6050270.html (syste ...

  3. element 确认框 confirm 的写法

    this.confirm('内容', '标题', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'success', callbac ...

  4. LLC半桥谐振变换器调试记录

    1.判断二极管是否击穿 2.判断mos管是否烧坏 直接用声音档,发出响声说明击穿了 3.测试二极管的正负极方法 将万用表调到二极管档 1.信号发生芯片周围的电阻 2.反馈部分的电阻 3.实验准备部分: ...

  5. Redis注意点记录

    场景:1主2从 1.不使用哨兵模式,则当主机宕机后,从机并不会自动切换到Master状态,仍旧是Slave,若主机重新恢复,则从机进行自动连接 2.使用哨兵模式后,主机宕机,从机会根据分配的权值在从机 ...

  6. windows下的环境搭建配置redis

    http://blog.csdn.net/spring21st/article/details/11176723

  7. Java 中序列化与反序列化引发的思考?

    java 中序列化指从对象转变为 二进制流的过程中需要进行序列化,而反序列化指二进制流转换为java 对象.那么有的时候java 存储到数据库不需要序列化, 而计算机系统本质存储的就是二进制文件,数据 ...

  8. intellij idea设置(字体大小、背景)

    1. 配置信息说明 Intellij Idea: 2017.2.5 2.具体设置 <1> 设置主题背景.字体大小 File---->Settings----->Appearan ...

  9. spring boot+jwt 权限验证

    上周看了一下jwt以前公司的开发都是使用session共享的方法.现在主流的两种方式一种是把登录信息保存在服务器,另一种则是把信息保存在客户端.在使用session 存储的时候会遇到很多的问题,随着项 ...

  10. Laravel Vuejs 实战:开发知乎 (1)项目环境配置和用户表设计

    1.使用laragon新建laravel项目 zhihu 2.配置env文件的database设置 DB_DATABASE=zhihu 3.分析users表需要的字段 4.修改数据库迁移文件: cla ...