Python编程-连接和操作mdb accdb数据库,pypyodbc的安装和使用

对于我们需要存储服务的编程来说,数据库是一个可靠的伙伴。数据库提供了非常便利的存储功能,并且可以通过sql语句快捷的增删改查。在python中有多种方法可以操作数据库,例如MySQLdb,pymysql,pypyodbc等,其实操作起来都差不多。

一般操作数据库的流程为:

我们连接后打开数据库,就可以使用sql语句操作数据库,切记不要忘记关闭,否则操作可能无法保存。

在众多库中,这个流程几乎都是不变的,操作数据库的关键还是sql语句的执行。一般需要注意的是一下几点:

  • 使用数据库信息 路径 密码等链接数据库 信息和路径一定不要写错
  • 查询语句不要写错

 

pypyodbc安装

使用pycharm的小伙伴可以直接在file-setting中进行添加

点击下面的install安装即可。没有ide的小伙伴可以直接在命令行中使用

pip install pypyodbc

 

数据库连接和操作

操作步骤为连接打开-获取游标-sql查询-关闭

这里游标需要说一下,游标实际上就像是一个指针,指向内存中存储数据集的地方,可以让用户像操作数组一样操作数据库的数据集。简而言之,游标是用于访问数据库条目信息的。

下面演示如何操作:

测试数据库的内容


# 不同数据库连接方法不一样
# 如果需要其他的请查看其他数据库的连接函数和参数

import pypyodbc
import os

# 操作Access数据库类

# __new__()方法负责创建实例,而__init__()仅仅是负责实例属性相关的初始化而已,执行顺序是,先new后init。

class getdatabase:

    # 初始化函数 连接数据库
    def __init__(self, db_name, password=""):
        if not os.path.exists(db_name):
            pypyodbc.win_create_mdb(db_name)  # 注意是绝对路径 例如 d:\\test_db.mdb

        self.db_name = db_name
        self.password = password
        self.connectDB()  # 调用连接函数

    
    # 连接数数据库函数
    def connectDB(self): 
        str = 'Driver={Microsoft Access Driver (*.mdb,*.accdb)};PWD=' + self.password + ";DBQ=" + self.db_name
        #  str = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=self.db_name'
        try:
            self.conn = pypyodbc.win_connect_mdb(str)
            return True
        except:
            print("数据库连接失败!请检查!")
        return False

    # 得到游标
    # 可以将游标(Cursor)形象地看做成一个变动的光标。它实际上是一个指针,它在一段Oracle存放数据查询结果集或数据操作结果
    # 集的内存中,这个指针可以指向结果集中的任何一条记录 。这样就可以得到它所指向的数据了,但初始时它指向首记录。这种模型很像编程语言中的数组。
    # 可以简单的理解游标为指向结果集记录的指针,利用游标可以把返回它当前指向 的行记录(只能返回一行记录)。如果要返回多行,那么需要不断滚动游标,把想要的数据查询一遍。用户可以操作游标所在位置行的记录。
    def getCur(self):
        try:
            return self.conn.cursor()  #打开数据库之后 获取游标
        except:
            return


    # 执行sql查询语句 返回所有的结果
    def selectDB(self, cur, sql):
        try:
            cur.execute(sql)
            return cur.fetchall()  # 返回查询结果
        except:
            return []


    # 执行插入语句 并更新数据库
    def insertDB(self, cur, sql):
        try:
            cur.execute(sql)
            self.conn.commit()  # 这个不能少 相当于确认 否则数据不会更新
            return True
        except:
            return False


    # 关闭数据库
    def close(self):
        try:
            self.conn.close()
        except:
            return

# 程序入口
if __name__ == '__main__':
    path = os.path.join("F:\SOFTWARE\编程软件\python\projects\AAA", "data.accdb")

    # 步骤一 连接数据库
    conn = getdatabase(path, "")

    # 步骤二 获取游标
    cur = conn.getCur()  # 游标的使用可以让用户像操作数组一样操作查询出来的数据集

    #步骤三 查询语句
    sql = u"select * from userData where Port = 1234"  # 中文需要前面加u 否则可能出错
    data = conn.selectDB(cur, sql)  # 使用游标配合查询语句
    print(str(data[0]["code"]))  # 输出结果中的一条的某个字段

    #步骤三 插入语句
    # sql = u"INSERT INTO userData(id,port,code,type,msg) VALUES(10,12321,'efes','不知道','dadfd')"
    # data = conn.insertDB(cur, sql)  # 使用游标配合查询语句

    #步骤四 关闭游标和数据库
    cur.close()
    conn.close()  

# 输出结果为
QYRWBBIWFR

打开和操作数据库之后,第二个关键的部分就是得到的返回结果是什么?只有在了解返回数据的结构我们才可以进一步的处理数据,我们来看一下data(查询语句的结果)变量中的数据内容

可以看到达到的data是列表,每一个元素时一行数据,而每个数据是一行,其中游标描述了每个字段的名字,类型等,支持我们使用类似字典的方式访问字段,注意这里的字段名字没有大小写之分

data[0]["code"]  #获取第一个行的code字段值 遍历使用len(data)可知返回条目数
# 结果
QYRWBBIWFR

 

这个库使用的关键是如何跟不同的数据库连接,幸好官网给出了很多的例子

https://www.connectionstrings.com

例如

剩下的大家需要什么就查什么吧,它还提供了很多

 

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值