数据库编程

  • 简介
    • 数据库三种数据模型
    • ADO、DAO、ODBC
      • 使用DAO访问数据库
      • 使用ODBC 访问数据库
      • 三者区别

简介

在应用程序中有很多信息需要存储起来,存储的方式有多种,数据库就是其中的一种。比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库。最常用的数据库模型是关系型数据库。

数据库三种数据模型

  • 层次模型

层次模型是数据库系统最早使用的一种模型,它的数据结构是一棵“有向树”。根结点在最上端,层次最高,子结点在下,逐层排列。层次模型的特征是:

  • 有且只有一个根结点

  • 其他结点有且仅有一个父结点

  • 网状模型

网状模型以网状结构表示实体与实体之间的联系。网中的每一个结点代表一个记录类型,联系用链接指针来实现。网状模型可以表示多个从属关系的联系,也可以表示数据间的交叉关系,即数据间的横向关系与纵向关系,它是层次模型的扩展。网状模型可以方便地表示各种类型的联系,但结构复杂,实现的算法难以规范化。其特征是:

  • 允许结点有多于一个父结点;
  • 可以有一个以上的结点没有父结点。

关系模型

关系模型以二维表结构来表示实体与实体之间的联系,它是以关系数学理论为基础的。关系模型的数据结构是一个“二维表框架”组成的集合。每个二维表又可称为关系。在关系模型中,操作的对象和结果都是二维表。关系模型是目前最流行的数据库模型。支持关系模型的数据库管理系统称为关系数据库管理系统,Access就是一种关系数据库管理系统。

  • 描述的一致性,不仅用关系描述实体本身,而且也用关系描述实体之间的联系;
  • 可直接表示多对多的联系;
  • 关系必须是规范化的关系,即每个属性是不可分的数据项,不许表中有表;
  • 关系模型是建立在数学概念基础上的,有较强的理论依据。

ADO、DAO、ODBC

Python提供了多种连接数据库的手段,包括DAO、ODBC、ADO以及
Python专用模块等。

使用DAO访问数据库

DAO(Data Access Object)是常见的一种连接数据库的方式,它适用于小型应用程序。DAO提供了操作管理关系型数据库系统所需的属性和方法,包括创建数据库、定义表、字段和索引,以及查询、添加、删除、修改等操作。

使用的库是pywin32

使用ODBC 访问数据库

ODBC(Open Database Connectivity,开放数据库互连)是Micros Sott公司提出的数据库访问通用接口标准。ODBC是一个数据库访问函数库,使应用程序可以直接操纵数据库中的数据。

ODBC基于SQL语言,是一种在SQL和应用界面之间的标准接口,它生成的程序与数据库或数据库引擎无关,为数据库用户和开发人员提供了数据库访问的统一接口,为应用程序实现与平台的无关 应用程序性和可移植性提供了基础。ODBC由应用程序、驱动 驱动程序管理器程序管理器、驱动程序、数据源构成,如图所示。

  • 应用程序:应用程序调用ODBC函数,完成连接数据库、提交执行语句给数据库、检索结果并处理错误、提交或者执行回滚语句的事务、与数据库断
    开连接等操作。
  • 驱动程序管理器:各种不同的数据库都需要向ODBC驱动程序管理器注册ODBC驱动程序,ODBC驱动程序管理器能将与ODBC兼容的执行请求从应用程序传给驱动程序,随后对数据库实现访问操作。
  • 驱动程序:ODBC通过驱动程序来提供数据库独立性。
  • 数据源:用户自定义的数据库服务器的名称、登录名和密码等信息。

三者区别

  • ODBC是一种底层的访问技术,因此,odbc api 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能;但不足之处由于odbc只能用于关系型数据库,使得利用odbc很难访问对象数据库及其他非关系数据库。

  • DAO提供了一种通过程序代码创建和操纵数据库的机制。最大特点是对microsoft jet数据库的操作很方便,而且是操作jet数据库时性能最好的技术接口之一。并且它并不只能用于访问这种数据库,事实上,通过dao技术可以访问从文本文件到大型后台数据库等多种数据格式

  • ADO是基于ole db的访问接口,它是面向对象的ole db技术,继承了ole d的优点。属于数据库访问的高层接口。

访问接口 易用性 运行性能 可扩展性 突出特点 能否访问非关系数据源 技术层次

odbc 差 较高 差 可进行底层控制 否 底层

mfc odbc 好 一般 通用标准,应用广泛 否 高层

mfc dao 好 较高 一般 访问jet性能最好 能 高层

ole db 较难 高 好 可访问非关系db 能 底层

ado 最好 高 好 可访问非关系,有多种编程接口 能 高层

Python环境下的数据库编程相关推荐

  1. 基于Java技术的Web环境下分布式数据库互操作性的实现

                作者:李炽明 莫倩 徐明 1 JDBC工作原理 JDBC(Java Database Connectivity)是1个Sun公司注册了的商标,代表用来执行SQL语句的Java语 ...

  2. Python环境下OpenCV视频流的多线程处理方式

    目录 前言 Python多线程编程 OpenCV视屏流的多线程处理 结语 前言 最近在功能性测试的过程中,需要在Python环境下用OpenCV读取网络摄像头的视频流,接着用目标检测器进行视屏帧的后续 ...

  3. Linux环境下的网络编程

    本文介绍了在Linux环境下的socket编程常用函数用法及socket编程的一般规则和客户/服务器模型的编程应注意的事项和常遇问题的解决方法,并举了具体代  码实例.要理解本文所谈的技术问题需要读者 ...

  4. python捷豹_图像处理基本工具——Python 环境下的 Pillow( PIL )

    由于笔者近期的研究课题与图像后处理有关,需要通过图像处理工具对图像进行变换和处理,进而生成合适的训练图像数据.该系列文章即主要记录笔者在不同的环境下进行图像处理时常用的工具和库.在 Python 环境 ...

  5. opencv在python环境下的安装_关于python环境下的opencv安装

    吐槽: 这一天我终于记起了这个博客.今天搞python环境下的opencv,又弄了一天,很烦躁.之前配置VS的opencv也是花了好久的时间,然后突然发现之前记录在电脑上的文档都找不到了,于是决定还是 ...

  6. 南工程c语言实验报告,Linux环境下-C语言编程实验报告(1)(总4页).doc

    Linux环境下-C语言编程实验报告(1)(总4页).doc 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称 Linux环境下 C语言编程 专业名称 网络工程班 级 1203班 学生姓名 ...

  7. linux环境c语言课程设计,linux环境下c语言编程课程设计

    linux环境下c语言编程课程设计 (14页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 1/14LINUX操作系统教程课程设计题目算术 ...

  8. Win32环境下动态链接库(DLL)编程原理

    Win32环境下动态链接库(DLL)编程原理 比较大应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.其中可能存在一些模块的功能较为通用,在构造其它软件系 ...

  9. anaconda的python环境下无法使用通过pip安装的python库

    场景描述: 在那种anaconda之前,已经在centos中安装了python和pip,在安装anaconda和jupyter后,在anaconda(或jupyter的notebook)的python ...

最新文章

  1. Vue插槽 slot
  2. 防止Domino邮件服务器作为垃圾邮件转发服务器
  3. 拒绝穿模!新方法让虚拟偶像自由互动无障碍“贴贴”,8000网友追着点赞
  4. Android多线程
  5. 如何使用eclipse进行嵌入式Linux的开发
  6. 2015第29周二AOP
  7. 网管型光纤收发器功能介绍
  8. 嵌入式linux文件系统类型,嵌入式Linux 的Cramfs 根文件系统配置的解决方案
  9. matlab画圆的命令_matlab画半圆
  10. 【学生党福利】AD 学生免费许可申请
  11. RT-Thread 4.0 + STM32F407 学习笔记1
  12. MongoDB学习(黑马教程)-5-数据库MongoDB的验证
  13. thawte代码签名证书,comodo软件签名证书,symantec签名证书,digicert微软签名证书的区别
  14. [生存志] 第99节 白起奋威屠百万
  15. Windows PC 微信不显示头像或表情
  16. RTX 3090 与 Tesla P40与 Tesla M40 深度学习训练速度比较
  17. Oracle RAC集群安装,从零开始
  18. 使用TIMESTAMPDIFF计算两个时间戳之间的时间间隔需要注意的细节
  19. freertos和ucos的区别
  20. c语言中单词的作用与形式,C语言基础教程:单词的用法与规则

热门文章

  1. linux qt绘框,Qt绘制异形窗体
  2. linux C语言如何获取进程号和线程号?getpid()、syscall(__NR_gettid)
  3. msvc MinGW gcc g++关系
  4. web前端入门学习 css(1)
  5. linux——用脚本实现全自动安装虚拟机
  6. centos7.3安装nodejs
  7. 6 频率_六级连续6年出现频率最高的200个词组【pdf版本】
  8. SpringCloud--Eureka服务注册与发现 Eureka 集群搭建 详细案例!!!
  9. linux校园网电脑开wifi密码,Linux/Ubuntu 16.04 使用校园网客户端Dr.com DrClient 有线连网,同时开启WiFi热点...
  10. mysql创建数据库schooldb_MySQL 创建数据表