原文地址: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. 【学习笔记】--- 老男孩学Python,day10, 初识函数 形参、实参

    函数:对功能的封装语法: def 函数名(形参): 函数体 函数名(实参) 函数名:命名规则和变量一样 函数的返回值: return, 函数执行完毕. 不会执行后面逻辑 1. 如果函数中不写retur ...

  2. WEB前端常用JavaScript代码整理

    文章目录 html代码用JS动态加载进页面 JS判断用户访问的是PC还是mobile或者微信浏览器 判断浏览器的简单有效方法 点击某个div区域之外,隐藏该div 如何在手机上禁止浏览器的网页滚动 改 ...

  3. COGS2608 [河南省队2016]无根树

    传送门 这题大概就是传说中的动态树形DP了吧,学习了一波…… 首先,对于没有修改的情况,不难想到树形DP,定义$f_i$表示强制必须选$i$且只能再选$i$的子树中的点的最优解,易得转移方程$f_i= ...

  4. Mysql 删除数据表的三种方式详解

    用法: 1.当你不再需要该表时, 用 drop; 2.当你仍要保留该表,但要删除所有记录时, 用 truncate; 3.当你要删除部分记录或者有可能会后悔的话, 用 delete. 删除强度:dro ...

  5. FineReport中如何用JavaScript解决控件值刷新不及时

    我们经常利用按钮进行一些页面值的处理工作,但是默认的逻辑造成,每次新填报的值,需要点击下空白区域或是执行某个其他操作才可以被正确读取,那么我们如何处理呢? 例:当我们用常规取值的时候,虽然B3单元格录 ...

  6. Android Service不能再详细的教程

    这篇包含了: Service后台服务.前台服务.IntentService.跨进程服务.无障碍服务.系统服务 几乎所有Android Service相关的东西. 前言 作为四大组件之一的Service ...

  7. Linux kernel pwn notes(内核漏洞利用学习)

    前言 对这段时间学习的 linux 内核中的一些简单的利用技术做一个记录,如有差错,请见谅. 相关的文件 https://gitee.com/hac425/kernel_ctf 相关引用已在文中进行了 ...

  8. oracle 手动打jar 包

    1.到loracle 的安装目录,D:\ProgramFiles\oracle\product\11.2.0\dbhome_1\jdbc\lib,找到文件 ojdbc6.jar,复制到 D 盘. 2. ...

  9. centos7 yum安装mysql | mariaDb

    mysql解释: mysql数据库是最常用的一种数据库,下面我来在centos7的迷你版上安装一下mysql.绝对纯净的环境哦 centos:    CentOS-7-x86_64-Minimal-1 ...

  10. 相关与卷积(数字信号处理)的数学原理及 Python 实现

    数学原理 在数字信号处理中,相关(correlation)可以分为互相关(cross correlation)和自相关(auto-correlation). 互相关是两个数字序列之间的运算:自相关是单 ...