python操作数据库(Mysql)
原文地址:https://www.cnblogs.com/R-bear/p/7022231.html
python DB-API介绍
1.python标准数据库接口为 python DB-API,python DB-API为开发人员提供了数据库应用标称接口
2.python数据库接口支持非常多的数据库,可以选择适合你项目的数据库:
MySQL
PostgreSQL
Microsoft SQL Server 2000
Oracle
Sybase
具体查看:https://wiki.python.org/moin/DatabaseInterfaces
不同的数据库,就需要下载不同的DB API模块,例如访问Oracle数据库和MySQL数据库,需要下载Oracle和MySQL数据库模块
DB-API是一个规范,它定义一个系列必须的对象和数据库存取方式,以便各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口.
python的DB-API,为大多数数据库实现了接口,使用它连接各种数据库后,就可以使用相同的方式操作各种数据库
通用步骤:
1.引入模块
2.获取与数据库的连接
3.执行SQL语句和存储过程
4.关闭数据库连接
什么是MySQLdb?
MySQLdb是用于python连接Mysql数据库的接口,它实现了python数据库API规范V2.0,基于MySQL C API上简历的
1.安装好mysql
2.导入python与mysql DB API模块
import mysql.connector #先安装mysql-connector-python-1.0.12-py3.3,再引入包 #创建链接数据库
config={'host':'127.0.0.1',#默认127.0.0.1
'user':'root',
'password':'vertrigo',
'port':3306,#默认即为3306
'database':'test',
'charset':'utf8'#默认即为utf8
}
try:
cnn=mysql.connector.connect(**config)#connect方法加载config的配置进行数据库的连接,完成后用一个变量进行接收
except mysql.connector.Error as e:
print('数据库链接失败!',str(e))
else:#try没有异常的时候才会执行
print("sucessfully!")
结果:
sucessfully!
接着上面,建表
#建表
sql_create_table='CREATE TABLE`student`\
(`id`int(10)NOT NULL AUTO_INCREMENT,\
`name`varchar(10) DEFAULT NULL,\
`age`int(3) DEFAULT NULL,\
PRIMARY KEY(`id`))\
ENGINE=MyISAM DEFAULT CHARSET = utf8' #获取执行的权限,利用数据库连接的返回,调用cursor方法获取一个标记位,再去操作数据库
#再通过标记位,去操作数据库
cursor = cnn.cursor(buffered = True)#buffered=True会把结果集保存到本地并一次性返回,这样可以提高性能
try:
cursor.execute(sql_create_table)#执行sql语句
except mysql.connector.Error as e:
print('创建表失败!',str(e))
接着上面,添加数据
#插入数据库
cursor = cnn.cursor(buffered=True)#获取插入的标记位
try:
#第一种:直接字符串插入方式
#表中的id是自增长,所以不用传id
#sql_insert1="insert into student(name,age) values ('orange',20)"
#cursor.execute(sql_insert1) #第二种:元组连接插入方式
sql_insert2="insert into student(name,age) values (%s,%s)"
#此处的%s为占位符,而不是格式化字符串,所以age用%s
data = ('xiongrun',18)#元组的形式传入两个值
cursor.execute(sql_insert2,data)#执行插入 #数据库的存储一类引擎为Innodb,执行完成后需执行commit进行事务提交
#cnn.commit()
#cursor.execute('commit') #当前的练习用的存储引擎为MyISAM,不用执行commit
#执行execute时就已经执行事务提交 #第三种:可以一次插入多条,效率比一条条插高,用的方法是executemany
stmt = 'insert into student(name,age) values (%s,%s)'
data = [
('xiongrun1',21),
('xiongrun2',22),
('xiongrun3',21)]
cursor.executemany(stmt,data) except mysql.connector.Error as e:
print('插入数据报错!',str(e))
finally:#无论如何都会执行下面的语句
cursor.close()#关闭标记位
cnn.close()#关闭数据库链接
接上面,查询数据
#查询
cursor = cnn.cursor(buffered = True)#获取查询的标记位
try:
#第一种
sql_query1='select id,name from student where age > %s'
cursor.execute(sql_query1,(1,))#固定格式,记住
values = cursor.fetchall()#符合条件的所有数据,全部赋值给values
print('所有数据:',values) #第二种
sql_query2 = 'select * from student'
cursor.execute(sql_query2)
#加[0]代表返回第一个字段,如果想返回一条完整的数据就不要加
result1 = cursor.fetchone()
print("一条数据:",result1)
result2 = cursor.fetchone()[0]
print("第一个字段:",result2) result3 = cursor.fetchmany(2)#返回2行数据
print("前2条数据:",result3) except mysql.connector.Error as e:
print('查询数据报错!',str(e))
finally:
cursor.close()#关闭标记位
cnn.close()#关闭数据库链接
接上面,删除
cursor = cnn.cursor()
try:
sql_delete='delete from student where name = %s and age < %s'
data = ('xiongrun',22)
cursor.execute(sql_delete,data)
except mysql.connector.Error as e:
print('删除错误',str(e))
finally:
cursor.close()#关闭标记位
cnn.close()#关闭数据库链接
结果:

练习:
手工创建一个表(表引擎为myisam),然后利用python对这表进行先插入再查询的操作
create table student_myisam (id int(10) not null auto_increment,name varchar(10) default
null,age int(3) default null,primary key (id))engine = myisam default charset = utf8;
手动创建表student_myisam

import mysql.connector #先安装mysql-connector-python-1.0.12-py3.3,再引入包 #创建链接数据库
config={'host':'127.0.0.1',#默认127.0.0.1
'user':'root',
'password':'vertrigo',
'port':3306,#默认即为3306
'database':'test',
'charset':'utf8'#默认即为utf8
}
try:
cnn=mysql.connector.connect(**config)#connect方法加载config的配置进行数据库的连接,完成后用一个变量进行接收
except mysql.connector.Error as e:
print('数据库链接失败!',str(e))
else:#try没有异常的时候才会执行
print("sucessfully!") #插入数据库
cursor = cnn.cursor(buffered=True)#获取插入的标记位 try:
sql_insert1="insert into student_myisam(name,age) values (%s,%s)"
#此处的%s为占位符,而不是格式化字符串,所以age用%s
data = ('xiongrun',18)#元组的形式传入两个值
cursor.execute(sql_insert1,data)#执行插入
except mysql.connector.Error as e:
print('插入数据报错!',str(e)) #查询数据
try:
sql_query2='select id,name from student_myisam where age > %s'
cursor.execute(sql_query2,(1,))#固定格式,记住
values = cursor.fetchall()#符合条件的所有数据,全部赋值给values
print('所有数据:',values)
except mysql.connector.Error as e:
print('查询数据报错!',str(e))
finally:
cursor.close()#关闭标记位
cnn.close()#关闭数据库链接
结果:
sucessfully!
所有数据: [(1, 'xiongrun')]
手工创建一个表(表引擎为innodb),然后利用python对这个表进行先插入再查询的操作
create table student_innodb (id int(10) not null auto_increment,name varchar(10) default
null,age int(3) default null,primary key (id))engine = innodb default charset = utf8;
手工创建student_innodb成功

import mysql.connector #先安装mysql-connector-python-1.0.12-py3.3,再引入包 #创建链接数据库
config={'host':'127.0.0.1',#默认127.0.0.1
'user':'root',
'password':'vertrigo',
'port':3306,#默认即为3306
'database':'test',
'charset':'utf8'#默认即为utf8
}
try:
cnn=mysql.connector.connect(**config)#connect方法加载config的配置进行数据库的连接,完成后用一个变量进行接收
except mysql.connector.Error as e:
print('数据库链接失败!',str(e))
else:#try没有异常的时候才会执行
print("sucessfully!") cursor = cnn.cursor(buffered=True)#获取插入的标记位 #插入数据库
try:
sql_insert1="insert into student_innodb(name,age) values (%s,%s)"
#此处的%s为占位符,而不是格式化字符串,所以age用%s
data = ('xiongrun1',20)#元组的形式传入两个值
cursor.execute(sql_insert1,data)#执行插入
#表引擎是innodb,需要执行下面两句,进行事务提交,否则会报错
cnn.commit()
cursor.execute('commit')
except mysql.connector.Error as e:
print('插入数据报错!',str(e)) #查询数据
try:
sql_query2='select id,name from student_innodb where age > %s'
cursor.execute(sql_query2,(1,))#固定格式,记住
values = cursor.fetchall()#符合条件的所有数据,全部赋值给values
print('所有数据:',values)
except mysql.connector.Error as e:
print('查询数据报错!',str(e))
finally:
cursor.close()#关闭标记位
cnn.close()#关闭数据库链接
结果:
sucessfully!
所有数据: [(1, 'xiongrun1')]
python操作数据库(Mysql)的更多相关文章
- 6-2 python 操作数据库mysql
1.python操作MySQL的 查询(select操作) 步骤 import pymysql # 1.建立数据库连接 conn = pymysql.connect(host='118.24.3.40 ...
- Python操作数据库之 MySQL
Python操作数据库之MySQL 一.安装Python-MySQLdb模块 Python-MySQLdb是一个操作数据库的模块,Python 通过它对 mysql 数据实现各种操作. 如果要源码安装 ...
- python操作数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
- 零基础学Python--------第11章 使用Python操作数据库
第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...
- python操作数据库PostgreSQL
1.简述 python可以操作多种数据库,诸如SQLite.MySql.PostgreSQL等,这里不对所有的数据库操作方法进行赘述,只针对目前项目中用到的PostgreSQL做一下简单介绍,主要包括 ...
- Python接口测试实战3(上)- Python操作数据库
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python学习笔记 - day11 - Python操作数据库
MySQL的事务 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关,MySQL的两种引擎如下: 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID ...
- 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作
孤荷凌寒自学python第四十四天Python操作数据库之准备工作 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计 ...
- Python操作数据库及hashlib模块
一.hashlib模块 hashlib模块,主要用于加密相关的操作,在python3的版本里,代替了md5和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA51 ...
- python 操作数据库的常用SQL命令
这俩天在学习PYTHON操作数据库的知识.其实基本SQL命令是与以前学习的MYSQL命令一致,只是增加了一些PYTHON语句. 1,安装pymysql,并导入. import pymysql 2,因为 ...
随机推荐
- CCScrollView的滑动体验
最近在研究cocos2dx,由于项目中要用到内容滚动效果(内容超出容器,可以通过滑动屏幕滚动来查看),所以就毫不犹豫的选择了CCScrollView组件. 使用中发现CCScrollView的体验 ...
- HwUI,CMS管理系统模板,漂亮,简单,兼容好
HwUI兼容目前所有浏览器,IE6+,Opera,Firefox,Chorme,Safari,由于IE6基本已废弃,所以也没有测试IE6的兼容,但做了部分IE6兼容调整.HwUI操作简单,路由导航不需 ...
- LeetCode SQL:Employees Earning More Than Their Managers
# Write your MySQL query statement below SELECT a.Name FROM Employee AS a INNER JOIN Employee AS b O ...
- python函数之调用函数
调用函数 python中内置了许多函数,我们可以直接调用,但需要注意的是参数的个数和类型一定要和函数一致,有时候不一致时,可以进行数据类型转换 1.abs()函数[求绝对值的函数,只接受一个参数] # ...
- 【vue】webpack插件svg-sprite-loader---实现自己的icon组件
引言:最近开始写vue的项目,借鉴了一下vue-element-admin源码,针对vue有一个关于icon图标的处理,最近也找了很多关于vue的icon处理的解决方案,大部分都是按照之前小程序的方式 ...
- Difference between 'SAME' and 'VALID' padding
Difference between 'SAME' and 'VALID' padding 'SAME' padding 和 'VALID' padding 的区别 If you like ascii ...
- windows zend_guard+apache no ssl+php no Thread Safe fastcgi模式 环境配置
最近公司要做代码加密,就采用ZEND GUARD 方式加密代码 并进行显示 此文为总结,以备自己以后查看和给需要的同学们参考 采用的php为5.3版本 由于现在加密的更改, 能支持zend guar ...
- C#实现ADH815通讯
最近在做自提柜项目,考虑到ADH815电路板在自助售卖行业的通用性.把通讯代码贴出来了. 下载地址
- Oracle DB 12.2(12cR2)的一个新特性:硬解析失败的SQL语句(需要符合一定条件)打印到alert_sid.log中.
How to Identify Hard Parse Failures (Doc ID 1353015.1)Bug 16945190 - Diagnostic enhancement to dump ...
- 阿里云堡垒机密钥连接ECS服务器
文:铁乐与猫 2017-6月中旬 堡垒机远程桌面windows系统就不用细说了 堡垒机远程ssh连接linux系统倒要说一下,毕竟是为安全一般只用通过密钥连接,而不使用密码的方式连接. 首先我们得在需 ...