原文地址: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)的更多相关文章

  1. 6-2 python 操作数据库mysql

    1.python操作MySQL的 查询(select操作) 步骤 import pymysql # 1.建立数据库连接 conn = pymysql.connect(host='118.24.3.40 ...

  2. Python操作数据库之 MySQL

    Python操作数据库之MySQL 一.安装Python-MySQLdb模块 Python-MySQLdb是一个操作数据库的模块,Python 通过它对 mysql 数据实现各种操作. 如果要源码安装 ...

  3. python操作数据库

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...

  4. 零基础学Python--------第11章 使用Python操作数据库

    第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...

  5. python操作数据库PostgreSQL

    1.简述 python可以操作多种数据库,诸如SQLite.MySql.PostgreSQL等,这里不对所有的数据库操作方法进行赘述,只针对目前项目中用到的PostgreSQL做一下简单介绍,主要包括 ...

  6. Python接口测试实战3(上)- Python操作数据库

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  7. Python学习笔记 - day11 - Python操作数据库

    MySQL的事务 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关,MySQL的两种引擎如下: 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID ...

  8. 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作

     孤荷凌寒自学python第四十四天Python操作数据库之准备工作 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计 ...

  9. Python操作数据库及hashlib模块

    一.hashlib模块 hashlib模块,主要用于加密相关的操作,在python3的版本里,代替了md5和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA51 ...

  10. python 操作数据库的常用SQL命令

    这俩天在学习PYTHON操作数据库的知识.其实基本SQL命令是与以前学习的MYSQL命令一致,只是增加了一些PYTHON语句. 1,安装pymysql,并导入. import pymysql 2,因为 ...

随机推荐

  1. VMWare Workstation使用总结几则[转]

    VMWare Workstation使用总结几则   1.安装 使用GHOST盘安装时一定要注意,需要把空盘建立分区并设置为主分区 PQ的使用形式,进入PQ找到磁盘设置为启用 否则 启动后显示Boot ...

  2. WPF 手机验证码 发送按钮倒计时 代码

    private async void SendButton_Click(object sender, RoutedEventArgs e) { var button = sender as Butto ...

  3. opengl学习笔记

    准备: 1.准备资源:从GLEW1.13.0下载GLEW,并且解压出glew-1.13.0目录.从FreeGLUT官网下载3.0.0版本.直接从这里下的编译后的FreeGLUT,选for MSVC,下 ...

  4. Fiddler基础教程

    一.Fiddler的基本介绍 Fiddler的官方网站:  www.fiddler2.com Fiddler官方网站提供了大量的帮助文档和视频教程, 这是学习Fiddler的最好资料. Fiddler ...

  5. springboot学习入门之五---开发Web应用之JSP篇

    转载:http://tengj.top/2017/03/13/springboot5/ 1整体结构 整体的框架结构,跟前面介绍Thymeleaf的时候差不多,只是多了webapp这个用来存放jsp的目 ...

  6. 如何在Markdown文档中插入空格?

    简单说 在 Markdown 文档中,可以直接采用 HTML 标记插入空格(blank space),而且无需任何其他前缀或分隔符.具体如下所示: 插入一个空格 (non-breaking space ...

  7. SQLSERVER中KeyHashValue的作用(上)

    SQLSERVER中KeyHashValue的作用(上) SQLSERVER中KeyHashValue的作用(下) 原文的标题是:SQLSERVER在索引下如何找到哈希值的随想 现在知道KeyHash ...

  8. Jmeter入门--Badboy使用教程(转)

    一.Badboy下载安装 感谢smxwn分享,转载地址:http://blog.csdn.net/wn_68/article/details/45872269 下载地址:http://www.badb ...

  9. ARC下的block导致的循环引用问题解析

    ARC下的block导致的循环引用问题解析 更详细细节请参考 http://blog.sina.com.cn/s/blog_8c87ba3b0101m599.html ARC下,copy到堆上的blo ...

  10. 超级好用的解析JSON数据的网站

    超级好用的解析JSON数据的网站 网址 http://json.parser.online.fr/beta/ 效果图 测试数据 {,},,,,,,},{,,,,},{,,,,},{,,,,,,,,,, ...