原文地址: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. Implementation:UnionFindSet 并查集

    class UnionFindSet { private: int *pref; int *rank; int capacity; public: UnionFindSet(int n) { ) { ...

  2. HTTPS 常见部署问题及解决方案

    在最近几年里,我写了很多有关 HTTPS 和 HTTP/2 的文章,涵盖了证书申请.Nginx 编译及配置.性能优化等方方面面.在这些文章的评论中,不少读者提出了各种各样的问题,我的邮箱也经常收到类似 ...

  3. MySql基本学习知识点:

    1.Mysql的简介: (1):常识: MySQL是一种关系数据库管理系统,是一种开源软件 由瑞典MySQL AB公司开发,2008年1月16号被Sun公司收购.2009年,SUN又被Oracle收购 ...

  4. github上的项目发布成静态网页

    代码上传成功之后就可以发布静态网页了,细心的童鞋应该已经看到我上传的代码在根目录就有一个html文件(发布其他情况没试过,感兴趣自己去尝试),发布的时候选择仓库即自动识别了. 第一步:点击settin ...

  5. 详解php常量const与define的区别和实例

    所谓常量是一个简单的标识符.在脚本执行期间该值不能改变.常量默认大小写敏感.通常常量标识符总是大写的.常量只能包含标量数据(boolean.integer.float和string).可以定义reso ...

  6. 64位版本的Windows不兼容,masm无法运行解决方法

    问题: 在Window64位运行不了的masm 解决方法: 1.下载DosBox0.74(当前最新): 2.安装后运行,运行后出现控制台: 3.在DosBox的控制台下运行 Mount x: x:/m ...

  7. MapReduce:Shuffle过程详解

    1.Map任务处理 1.1 读取HDFS中的文件.每一行解析成一个<k,v>.每一个键值对调用一次map函数.                <0,hello you>   & ...

  8. UltraPtr下拉刷新

    github:  https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh <in.srain.cube.views.ptr.PtrF ...

  9. Python 3从入门到精通02-python的简单使用

    Python 3中的打印语句和字符串使用: Python中的常见数学运算: 这样的简单基础知识,你需要花5分钟就可以了,很基础的东西.

  10. spring boot(10)-tomcat jdbc连接池

    默认连接池 tomcat jdbc是从tomcat7开始推出的一个连接池,相比老的dbcp连接池要优秀很多.spring boot将tomcat jdbc作为默认的连接池,只要在pom.xml中引入了 ...