数据库入门-pymysql模块的使用
一、pymysql模块安装
由于本人的Python版本为python3.7,所以用pymysql来连接数据库(mysqldb不支持python3.x)
方法一:
#在cmd输入
pip3 install pymysql
方法二(pycharm IDE):
[File] >> [settings] >> [Project: study] >> [Project Interpreter] >>点击右上角“+”号,搜索框输入“pymysql”>> [Install按钮]
二、连接数据库
import pymysql
# 创建链接得到一个链接对象
conn = pymysql.Connect(
host="127.0.0.1", # 数据库服务器主机地址
user="root", # 用户名
password="", # 密码
database="test", #数据库名称
port=3306, # 端口号 可选 整型
charset="utf8" # 编码 可选
)
还可以使用函数的形式连接数据库:
import pymysql def connect_mysql():
db_info = {
'host':'192.168.13.253',
'user':'zfj',
'password':'',
'port':3306,
'database':'day40',
'charset':'utf8'
}
try:
db = pymysql.Connect(**db_info)
print('连接成功!')
except Exception as e:
print('e')
return db if __name__ == '__main__':
db = connect_mysql()
函数的形式
三、操作数据库
1.连接对象的常用方法
commit()#提交稳定存储的更改
rollback()#回滚当前事务
autocommit_mode=无 #指定的自动提交模式。无表示使用服务器默认值。
要想操作数据库必须先建立游标对象,不需要自己创建调用数据库对象下面的cursor方法就可以了
2.游标对象
创建游标:
db = pymysql.connect(config) # 创建数据库链接对象
cus = db.cursor # 创建游标对象
print(dir(cus)) # 查看游标的方法
游标常用方法:
cus.cursor() #创建游标对象
cus.close() #关闭游标对象 cus.excute(query,args=None) #执行查询
参数:
query(str) - 要执行的查询。
args(元组,列表或字典) - 与查询一起使用的参数。(可选的)
返回:受影响的行数
返回类型:INT executemany(查询,args ) #针对一个查询运行多个数据
参数:
query - 要在服务器上执行的查询
args - 序列或映射的序列。它用作参数。
此方法可提高多行INSERT和REPLACE的性能。否则它等同于使用execute()循环遍历args。 cus.fetchone() #获取下一行
cus.fetchall() #获取所有行
cus.fetchmany(size =None) #获取几行
注:sql必须是字符串类型
3.示例
import pymysql
# 创建链接得到一个链接对象
conn = pymysql.Connect(
host="127.0.0.1", # 数据库服务器主机地址
user="root", # 用户名
password="admin", # 密码
database="day42", #数据库名称
port=3306, # 端口号 可选 整型
charset="utf8" # 编码 可选
)
# 获取游标对象 pymysql.cursors.DictCursor指定 返回的结果类型 为字典 默认是元祖类型
cursor = conn.cursor(pymysql.cursors.DictCursor) # # 添加数据
# res = cursor.execute("insert into emp values(100,'胡歌','男',30,1,'job',60000)")
# if res:
# print("插入成功")
# else:
# print("插入失败") # 提交修改 因为pymysql 模块默认是启用事务的 你的sql语句 如果不提交 相当于没有执行 # conn.commit()
# res = cursor.execute("drop database day42") # res = cursor.execute("delete from t1 where id = 1")
# print(res) try:
cursor.execute("update moneyTable set money = money - 50 where name = '小明'")
#如果小花的账户出问题了 无法更新数据 那就需要回滚
cursor.execute("update moneyTable set money = money + 50 where name = '小花'")
conn.commit()
except:
conn.rollback() cursor.close()
conn.close() # 小明有100块 准备给小花转50
# update moneyTable set money = money - 50 where name = "小明";
# 发生一些别错误 如果发生了错误 就执行撤销操作 rollback;
# update moneyTable set money = money + 50 where name = "小花";
四、安全问题
如何保证数据安全是近几年来火热的主题之一,这里不细讲,就说一些和pymysql相关的sql注入攻击。
#sql = "select *from user where user = '%s' and pwd = '%s';" % (input("input userName"),input("input password")) # 当用户输入的用户名为字符串 为 yy' -- 时
# 最终产生的sql select *from user where user = 'yy' -- ' and pwd = '987657890';
# -- 用于mysql注释 意思是 后面的内容忽略掉
# 从而导致 密码是否正确都能登录成功
# "select *from user where user = 'axxax' or 1=1;
那python是如何避免普通的sql注入的呢?
通过excute函数,将需要传的参数放到arg参数中,让pymysql帮你屏蔽
count = cursor.execute("select *from user where user = %s and pwd = %s;",args=(input("user"),input("pwd"))) print(count)
if count:
print("login success")
else:
print("login error") cursor.close()
conn.close()
读者想要学习更多关于安全的内容可以关注“实验吧”学习:http://www.shiyanbar.com/
部分参考 pymysql文档:https://pymysql.readthedocs.io/en/latest/index.html
连接对象规范:https://www.python.org/dev/peps/pep-0249/#connection-objects
数据库入门-pymysql模块的使用的更多相关文章
- Python连接MySQL数据库之pymysql模块使用
安装PyMySQL pip install pymysql PyMySQL介绍 PyMySQL是在python3.x版本中用于连接MySQL服务器的一个库,2中则使用mysqldb. Django中也 ...
- Python连接MySQL数据库之pymysql模块
pymysql 在python3.x 中用于连接MySQL服务器的一个库:Python2中则使用mysqldb pymysql的模块的基本的使用 # 导入pymysql模块 import pymysq ...
- 数据库中pymysql模块的使用
pymysql 模块 使用步骤: 核心类Connect链接用和Cursor读写用 1. 与数据库服务器建立链接 2. 获取游标对象(用于发送和接收数据) 3. 用游标执行sql语句 4. 使用fetc ...
- Python之路【第二十五篇】:数据库之pymysql模块
数据库进阶 一.pymysql模块 pymysql是Python中操作Mysql的模块,其使用的方法和py2的MySQLdb几乎相同. 二.pymysql模块安装 pip install pymysq ...
- Mysql(九):Python连接MySQL数据库之pymysql模块使用
Python3连接MySQL 本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用. PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服 ...
- 数据库操作——pymysql模块
一 import pymysql conn=pymysql.connect( host='localhost', port=3306, user='zuo', password=', database ...
- 可视化工具Navicat的使用/pymysql模块的使用
一.可视化工具Navicat的使用 1.官网下载:http://www.navicat.com/en/products/navicat-for-mysql 2.网盘下载:http://pan.baid ...
- MySQL:记录的增删改查、单表查询、约束条件、多表查询、连表、子查询、pymysql模块、MySQL内置功能
数据操作 插入数据(记录): 用insert: 补充:插入查询结果: insert into 表名(字段1,字段2,...字段n) select (字段1,字段2,...字段n) where ...; ...
- 05 数据库入门学习-正则表达式、用户管理、pymysql模块
一.正则表达式 正则表达式用于模糊查询,模糊查询已经讲过了 like 仅支持 % 和 _ 远没有正则表达式灵活当然绝大多数情况下 like足够使用 #语法 select *from table whe ...
随机推荐
- html中滚动小球的demo
类似于下图的效果: 代码: <!DOCTYPE html> <html> <head> <title>Promise animation</tit ...
- iOS XIB使用中适配iPhoneX的安全区域、调用UiView动画
2.调用UiView动画 WeakSelf; self.detailsViewBom.constant += 230; [UIView animateWithDuration:animotiontim ...
- Docker proxy
Method One: mkdir /etc/systemd/system/docker.service.dvim /etc/systemd/system/docker.service.d/http- ...
- centos7服务器配置nuxt部署环境
一.安装node(默认安装在根目录下) 1.首先安装wget yum install -y wget 2.下载最新nodejs安装包 wget https://nodejs.org/dist/v10. ...
- Android Button常用法
常用属性: <Button android:id="@+id/btn_1" android:layout_width="match_parent" and ...
- mvn test报错
1 Scenarios (1 passed) 4 Steps (4 passed) 0m11.846s [INFO] Tests run: 1, Failures: 0, Errors: 0, Ski ...
- HBase RowKey与索引设计
1. HBase的存储形式 hbase的内部使用KeyValue的形式存储,其key时rowKey:family:column:logTime,value是其存储的内容. 其在region内大多以升序 ...
- Asp.net core 3.0
序言 我的看法:如果你未来五到十年还打算靠 ASP.NET 吃饭,ASP.NET MVC 一定要学,写 WebForm 工作机会将变得很少,具备 MVC 技能才有本钱跟年轻小伙子们抢饭碗,很高比例的 ...
- javascript 获取字符递增
比如A->B,AA->AB,Z->AA 参考https://blog.csdn.net/xiaotao2004/article/details/75096607 C#版本,改写为ja ...
- Linux下批量杀掉 包含某个关键字的 程序进程
有时候因为一些情况,需要把 linux 下符合某一项条件的所有进程 kill 掉,又不能用 killall 直接杀掉某一进程名称包含的所有运行中进程(我们可能只需要杀掉其中的某一类或运行指定参数命令的 ...