python中pymsql常用方法(1)
python中pymysql模块常用方法以及其使用
首先我们知道pymysql 是python中操作数据库的模块
使用步骤分为如下几步:
1.与数据库服务器建立链接 conn=pymysql.Connect(....)
2.获取游标对象(用于发送和接受数据)cursor=conn.cursor()
3.使用游标执行sql语句cursor.excute(sql)-->此时返回的是执行该语句后数据库表中受影响的数据条数
4.使用fetch方法来获取执行的结果
5.关闭连接:先关闭游标,再关闭连接
| id | caption |
|---|---|
| 1 | 三年级二班 |
| 2 | 三年级三班 |
| 3 | 一年级二班 |
| 4 | 二年级九班 |
简单使用之数据库读取
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='root',
database='day41',
charset='utf8'
)
cursor = conn.cursor(pymysql.cursors.DictCursor) # 将查询结果做成字典格式
res = cursor.execute('select * from class') # 返回的值是受影响数据的条数
print(res) # 查询到的数据总条数
print(cursor.fetchone()) # 获取一条查询结果
# cursor.scroll(1, 'absolute') # 绝对移动:相对于文件起始位置,向后移动一组数据
# cursor.scroll(1,'relative') # 相对移动,相对于当前位置,向后移动一个位置
cursor.scroll(-1) # 游标 相对移动到当前位置的前一条数据位置
# 获取所有剩余的内容查询的内容的字典 --》类似于文件读写的游标
print(cursor.fetchall()) # [{'cid': 2, 'caption': '三年三班'}, {'cid': 3, 'caption': '一年二班'}, {'cid': 4, 'caption': '二年九班'}]
cursor.close() # 关闭游标
conn.close() # 关闭连接
简单使用之数据库的增改删操作
上面所示的是我们在python中pymysql的最简单的用法,在实际中,我们在对数据库的读取操作的时候,是不需要进行commit提交处理的,但是在对表的增和改操作的时候,数据库默认是启用事务的,sql语句如果没有提交相当于没有执行。
| id | name | password | money |
|---|---|---|---|
| 1 | qzk | 123 | 1000 |
| 2 | qby | 123 | 1000 |
| 3 | qwe | 123 | 1000 |
| 4 | zdc | 123 | 1000 |
| 5 | qqq | 123 | 1000 |
# -*- coding: utf-8 -*-
import pymysql
# Connect 类 实例化一个 conn连接对象
conn = pymysql.Connect(
host='127.0.0.1',
user='root',
port=3306,
password='root',
database='day41',
charset='utf8'
)
# 获取游标对象
cursor = conn.cursor(pymysql.cursors.DictCursor)
# 这里演示一下 rollback()作用:当有两个或多个操作因其他原因只完成部分操作而未能执行完全部操作导致的数据不安全问题,可以对表数据中的增改进行撤销处理。
try:
res1 = cursor.execute("update userinfo set money = money-50 where name= 'qqq'")
print(cursor.fetchall())
res = cursor.execute("update userinfo set money =money-50 where name= 'ewr'")
if not res: # 该处演示当 res 返回值为0时,表示该操作未对数据库产生影响,因为ewr不在数据库中,所以返回0,此事上一句操作 res1 已操作完毕,用户账户余额已减去50 ,故,需要撤销上面的操作,所以用 rollback()
print('转账失败')
conn.rollback()
except:
conn.rollback()
cursor.execute("select * from userinfo") # 执行语句查看数据库的userinfo所有字段信息,返回收影响的数据条数
print(cursor.fetchall()) # 查看到上面语句执行的结果
# 提交修改 因为pymysql模式默认是启用事务的,sql语句如果没提交相当于没执行
conn.commit() # 提交事务
"""
注意:pymysql 默认不提交修改的,但是这里指的是对表中的记录操作不提交,像诸如删库、删表的操作时无法撤销的
"""
链接数据库的用户登录简单实现
# -*- coding: utf-8 -*-
import pymysql
# 创建连接得到一个连接对象
conn = pymysql.Connect(
host='127.0.0.1', # 数据库服务器主机地址
port=3306, # 端口号,可选
user='root', # 数据库用户名
password='root', # 数据库密码
database='day41', # 数据库名称
charset='utf8' # 编码
)
while True:
name_inp = input('>>>username:').strip()
pwd_inp = input('>>>>pwd:').strip()
# 获取游标对象
cursor = conn.cursor(pymysql.cursors.DictCursor)
sql = 'select * from userinfo where name=%s and password=%s'
# cursor 执行sql
res = cursor.execute(sql, (name_inp, pwd_inp))
print(res)
# sql注入
if res:
print('登录成功')
print(cursor.fetchone()) # 查询一个
break
else:
print('登录失败,用户名或密码错误')
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
"""
一般我们不要自己手动拼接(关键参数)查询条件(会导致sql注入)
"""
sql注入问题
# 不要手动去拼接查询的sql语句
username = input(">>>:").strip()
password = input(">>>:").strip()
sql = "select * from user where username='%s' and password='%s'"%(username,password)
# 用户名正确
username >>>: jason' -- jjsakfjjdkjjkjs
# 用户名密码都不对的情况
username >>>: xxx' or 1=1 --asdjkdklqwjdjkjasdljad
password >>>: ''
增删改
# 增
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.excute(sql,('jason','123'))
# 修改
sql = "update user set username='qzksdb' where id=1"
rows = cursor.excute(sql)
"""
增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改
"""
# 一次插入多行记录
res = cursor,excutemany(sql,[(),(),()]
python中pymsql常用方法(1)的更多相关文章
- python中os常用方法
python中OS常用方法 Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问 ...
- Python中字符串常用方法
capitalize() String.capitalize() 将字符串首字母变为大写 name = 'xiaoming' new_name = name.capitalize() print(ne ...
- python中的常用方法
1.os模块的常用方法: >>> import os >>> >>> myFiles = ['accounts.txt', 'details.cs ...
- python中datetime常用方法
# 可运算的时间方法包 >>> import datetime >>> import time >>> res = datetime.dateti ...
- python中os的常用方法
1.os模块:os模块在python中包含普遍的操作系统功能,下面列出了一些在os模块中比较有用的部分. os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符 ...
- python中os模块的常用方法
1.os模块:os模块在python中包含普遍的操作系统功能,下面列出了一些在os模块中比较有用的部分. os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符 ...
- python中使用正则表达式处理文本(仅记录常用方法和参数)
标准库模块 python中通过re模块使用正则表达式 import re 常用方法 生成正则表达式对象 compile(pattern[,flags]) pattern:正则表达式字符串 flags: ...
- python中calendar模块的常用方法
>>> import calendar >>> calendar.isleap(2000) #判断是否是闰年 True >>> calendar. ...
- python 中os的常用方法
1.更改当前的路径 import os os.chdir( "D:/java") 注意python中表示文件路径,文件夹之间用/或者\\不能使用\
随机推荐
- TensorFlow常用激活函数及其特点和用法(6种)详解
http://c.biancheng.net/view/1911.html 每个神经元都必须有激活函数.它们为神经元提供了模拟复杂非线性数据集所必需的非线性特性.该函数取所有输入的加权和,进而生成一个 ...
- spring学习-ApplicationContext-spring上下文深入理解
4月份开始复习一遍spring相关知识.让自己巩固一下spring大法的深奥益处,所以就看了大佬的博客,转载留下来日后继续研读.认为重点的标记为红色 以下文章内容转载自:http://www.cnbl ...
- 【视频开发】【计算机视觉】相机标定(Camera calibration)《二》
简介 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P 的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Sprin ...
- storm单节点问题(转载)
一.storm nimbus 单节点问题概述 1.storm集群在生产环境部署之后,通常会是如下的结构: 从图中可以看出zookeeper和supervisor都是多节点,任意1个zookeeper节 ...
- angular JS中 ‘=’与angular.copy的区别
先来看代码: <b>{{test1}}</b> <input type="text" ng-model="test2" title ...
- Docker在Windows上的初体验
作为Docker的初学者,我有几个疑问,找到了答案,并实践了一下,希望对和我一样的初学者有帮助: 1.Docker是什么? 大家对虚拟机应该比较熟悉,虚拟机和docker都是为了实现隔离. 虚拟机隔离 ...
- ElasticSearch 线程池类型分析之SizeBlockingQueue
ElasticSearch 线程池类型分析之SizeBlockingQueue 尽管前面写好几篇ES线程池分析的文章(见文末参考链接),但都不太满意.但从ES的线程池中了解到了不少JAVA线程池的使用 ...
- JAVA WEB项目目录结构以及web应用部署的根目录,编译路径和项目根目录的区别
本文链接:https://blog.csdn.net/l00149133/article/details/78984083 web应用部署的根目录,编译路径和项目的根目录有什么区别? 直接上例子: 你 ...
- HDU校赛 | 2019 Multi-University Training Contest 4
2019 Multi-University Training Contest 4 http://acm.hdu.edu.cn/contests/contest_show.php?cid=851 100 ...
- 概述UML——UML系列篇一
前言 作为Java应用开发者,日益感觉到对象建模的重要性.系统的复杂性,对于不能全局掌握的我和编程时没有对象模型指导时,编写实现代码时,感觉甚是困难.处于这些原因,这里想借助学习UML建模,在分析需求 ...