python操作mysql基础一
python操作mysql基础一
使用Python操作MySQL的一些基本方法
前奏
为了能操作数据库, 首先我们要有一个数据库, 所以要首先安装Mysql, 然后创建一个测试数据库python_test用以后面的测试使用
|
1
|
CREATE DATABASE `python_test` CHARSET UTF8 |
导入数据库模块
|
1
|
import MySQLdb |
连接数据库
|
1
|
con = MySQLdb.connect(host="localhost", user="root", passwd="******",db="python_test",port=3306) |
在这里, 我们虽然拿到了python的数据库连接, 但是不能在这个对象上直接对数据库进行操作, 还需要获取对应的操作游标才能进行数据库的操作,所以还需要进行下面的操作
|
1
|
cur = con.cursor() |
创建表格
|
1
2
|
cur.execute('create table stu_info (name char(128) not null default "", age tinyint(3) not null default 0, sex enum("man","femal") not null default "man") engine=innodb charset=utf8')#0L |
cur.execute 返回执行的sql 影响的行数, 因为这里是创建数据库, 所以是0L行
但到这里还并没有真正执行了sql语句, 必须使用MySQLdb.commit才是真正执行完毕
|
1
|
con.commit() |
到这里, 我们的表格才算真正创建完成
同理, 往表中写数据, 也是一样的操作流程 execute ==> commit
不过, 写入数据的execute 稍有不同, 如下
更新表数据
往表中写入数据时, 执行execute 方法, 有两种方式, 一种是直接execute(sql), 然后commit 完成, sql里是写入的sql 语句
|
1
2
|
cur.execute("insert into stu_info (name, age, sex) values ('Yi_Zhi_Yu',25,'man')")con.commit() |
这会直接写入表中,但还有另外一种方式,
execute 可以接受两个参数, 第一个参数是sql语句, 不过这个sql中的values的内容使用占位符%s表示,第二个参数是实际的写入的values列表, 如下:
|
1
2
|
cur.execute("insert into stu_info (name, age, sex) values (%s,%s,%s)", ("Tony",25, "man"))con.commit() |
这种方式与第一中方式相比, 更清晰一些, 安全性也更好, 能有效防止sql注入
另外, cursor还有一个executemany, 参数和execute一样, 不过第二个参数可以传递多列表值, 达到多次执行某个语句的效果
|
1
2
|
cur.executemany("insert into stu_info (name, age, sex) values (%s,%s,%s)",(("LiMei",26,"femal"),("YuanYuan",28,"femal")))con.commit() |
这里实际上就是执行了两次插入操作
数据查询
直接看例子
|
1
2
|
cur.execute("select * from stu_info")stus = cur.fetchall() |
#stus 已经是查询的结果结合了, 格式如下:
|
1
2
3
4
|
(('Yi_Zhi_Yu', 25, 'man'), ('Tony', 25, 'man'), ('LiMei', 26, 'femal'), ('YuanYuan', 28, 'femal')) |
tuple形式, 我们可以通过循环输出
|
1
2
|
for stu in stus: print "name: %s; age: %d; sex: %s" %(stu[0], stu[1], stu[2]) |
输出:
|
1
2
3
4
|
name: Yi_Zhi_Yu; age: 25; sex: manname: Tony; age: 25; sex: manname: LiMei; age: 26; sex: femalname: YuanYuan; age: 28; sex: femal |
那上面的查询虽然得到了每行的数据, 但结果集中并没有字段名, 如果要返回字段名, 如下操作:
|
1
2
3
|
cur = con.cursor(cursorclass=MySQLdb.cursors.DictCursor)cur.execute("select * from stu_info")cur.fetchall() |
返回的结果集:
|
1
2
3
4
|
({'age': 25, 'name': 'Yi_Zhi_Yu', 'sex': 'man'}, {'age': 25, 'name': 'Tony', 'sex': 'man'}, {'age': 26, 'name': 'LiMei', 'sex': 'femal'}, {'age': 28, 'name': 'YuanYuan', 'sex': 'femal'}) |
每个元素都是一个dict, 以key-value的形式展示了每个字段和对应的值
总结
Python 中对数据的操作, 增删改均要在指针对象执行了sql语句后, 使用连接对象commit, 查询的结果使用指针对象的fetch系列方法获取
原文地址:https://www.jb51.net/article/71142.htm
python操作mysql基础一的更多相关文章
- python 操作 mysql基础补充
前言 本篇的主要内容为整理mysql的基础内容,分享的同时方便日后查阅,同时结合python的学习整理python操作mysql的方法以及python的ORM. 一.数据库初探 在开始mysql之前先 ...
- python操作Mysql基础
import pymysql #不修改数据 def no_data_change(): db=pymysql.connect('host','user','pw','db_name') #host,u ...
- Windows下安装MySQLdb, Python操作MySQL数据库的增删改查
这里的前提是windows上已经安装了MySQL数据库,且配置完成,能正常建表能操作. 在此基础上仅仅需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了.仅仅有1M ...
- Python开发【第十一篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...
- mysql数据库----python操作mysql ------pymysql和SQLAchemy
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQ ...
- 【转】python操作mysql数据库
python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库 ...
- Python操作MySQL[转]
本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...
- python接口自动化(三十八)-python操作mysql数据库(详解)
简介 现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库, ...
- 爬虫(九):python操作MySQL、MongoDB
1. python操作MySQL 1.1 MySQL基础 在java基础部分就写过了. https://www.cnblogs.com/liuhui0308/p/11891844.html 1.2 p ...
随机推荐
- Spring Cloud Sleuth 整合
引入Maven依赖 org.springframework.cloud spring-cloud-starter-sleuth 日志发生的变化 当应用ClassPath下存在org.springfre ...
- Cheat Engine 作弊表框架代码
打开游戏 打开自动汇编 扫描的所有过程,这里就省略了 引用作弊表框架代码 查找使阳光减少的地址 拷贝这个地址 添加到自动汇编脚本里,并添加汇编指令 分配到当前作弊表 生成自动汇编脚本 进行激活测试 可 ...
- Linux添加用户并赋予root权限
新增用户 创建一个名为qiang,其家目录位于/usr/qiang的用户 adduser -d /usr/qiang -m qiang 或直接这样,则用户的家目录会默认为/home/目录 adduse ...
- The 2019 Asia Yinchuan First Round Online Programming F. Moving On
t题目链接:https://nanti.jisuanke.com/t/41290 思路:题目意思很容易想到floyd,但是由于危险度的限制,我们该怎么跑floyd呢. 一开始理解错题目了,以为u-&g ...
- Codeforces B. Bad Luck Island(概率dp)
题目描述: Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- seaborn---画热力图
1.引用形式: seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None ...
- HDU3572 Task Schedule(最大流+构图思维)
题意: 有N个任务M个机器,给每个任务i完成所花费的时间Pi且每个任务要在第Si天后开始,在第Ei天前结束,保证任务在(S,E)之间一定能完成. 每个机器在一天里只能运行一个任务,一个任务可以在中途更 ...
- httprunner学习11-辅助函数debugtalk.py
前言 在httprunner里面,每个 YAML / JSON 文件的脚本都是独立运行的,有时候我们希望能跨文件使用公用的参数. 比如登录生成一个token,后面的用例都可以去引用这个token值,或 ...
- .gitignore 标准模板 -适用于SpringBoot+Vue项目 -Idea+VSCode开发
.gitignore 标准模板 -适用于SpringBoot+Vue项目 node_modules/ target/ !.mvn/wrapper/maven-wrapper.jar ### STS # ...
- URI和URL的区别(转)
1说明: 这段时间写android的时候用到了URL和URI,有点分不清楚,于是做了一个系统性的学习.在这里将自己的学习笔记粘贴出来,希望对大家有帮助. 1)Java类库里有两个对应的类java.ne ...