• 使用Python对Access读写操作


    学习Python的过程中,我们会遇到Access的读写问题

    一、可以利用win32.client模块的COM组件访问功能,通过ADODB操作Access的文件。

    1、导入模块

    import win32com.client

    2、建立数据库连接

    conn = win32com.client.Dispatch(r"ADODB.Connection")
    DSN = 'PROVIDER = Microsoft.Jet.OLEDB.4.0;DATA SOURCE = test.mdb'
    conn.Open(DSN)

    3、打开一个记录集

    rs = win32com.client.Dispatch(r'ADODB.Recordset')
    rs_name = 'MEETING_PAPER_INFO'
    rs.Open('[' + rs_name + ']', conn, 1, 3)

    4、对记录集操作

    rs.AddNew()  #添加一条新记录
    rs.Fields.Item(0).Value = "data"  #新记录的第一个字段设为"data"
    rs.Update()  #更新

    5、用SQL语句来增、删、改数据

    #
    sql = "Insert Into " rs_name + " (id, innerserial, mid) Values ('002133800088980002', 2, '21338')"  #sql语句
    conn.Execute(sql)  #执行sql语句
    #
    sql = "Delete * FROM " + rs_name + " where innerserial = 2"
    conn.Execute(sql)
    #
    sql = "Update " + rs_name + " Set mid = 2016 where innerserial = 3"
    conn.Execute(sql)

    6、查:遍历记录

    rs.MoveFirst()  #光标移到首条记录
    count = 0
    while True:
        if rs.EOF:
            break
        else:
            for i in range(rs.Fields.Count):
                #字段名:字段内容
                print(rs.Fields[i].Name, "", rs.Fields[i].Value)
            count += 1
        rs.MoveNext()

    7、关闭数据库

    conn.Close()

    二、利用pypyodbc模块

    1.导入模块

    import pypyodbc

    2.建立数据库连接

    #建立数据库连接
    def mdb_conn(db_name, password = ""):
        """
        功能:创建数据库连接
        :param db_name: 数据库名称
        :param db_name: 数据库密码,默认为空
        :return: 返回数据库连接
        """
        str = 'Driver={Microsoft Access Driver (*.mdb)};PWD' + password + ";DBQ=" + db_name
        conn = pypyodbc.win_connect_mdb(str)
    
        return conn

    3.创建游标

    cur = conn.cursor()

    4.用sql语句来增、删、改、查数据

    #
    def mdb_add(conn, cur, sql):
        """
        功能:向数据库插入数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except:
            return False
    
    #
    def mdb_del(conn, cur, sql):
        """
        功能:向数据库删除数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except:
            return False
    
    #
    def mdb_modi(conn, cur, sql):
        """
        功能:向数据库修改数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except:
            return False
    
    #
    def mdb_sel(cur, sql):
        """
        功能:向数据库查询数据
        :param cur: 游标
        :param sql: sql语句
        :return: 查询结果集
        """
        try:
            cur.execute(sql)
            return cur.fetchall()
        except:
            return []

    5.关闭游标

    cur.close()

    6.关闭数据库连接

    conn.close()

    附:pypyodbc模块的完整测试代码

    # -*- coding:utf-8 -*-
    __author__ = 'mayi'
    
    #导入模块
    import pypyodbc
    
    #定义conn
    def mdb_conn(db_name, password = ""):
        """
        功能:创建数据库连接
        :param db_name: 数据库名称
        :param db_name: 数据库密码,默认为空
        :return: 返回数据库连接
        """
        str = 'Driver={Microsoft Access Driver (*.mdb)};PWD' + password + ";DBQ=" + db_name
        conn = pypyodbc.win_connect_mdb(str)
    
        return conn
    
    #增加记录
    def mdb_add(conn, cur, sql):
        """
        功能:向数据库插入数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except:
            return False
    
    #删除记录
    def mdb_del(conn, cur, sql):
        """
        功能:向数据库删除数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except:
            return False
    
    #修改记录
    def mdb_modi(conn, cur, sql):
        """
        功能:向数据库修改数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except:
            return False
    
    #查询记录
    def mdb_sel(cur, sql):
        """
        功能:向数据库查询数据
        :param cur: 游标
        :param sql: sql语句
        :return: 查询结果集
        """
        try:
            cur.execute(sql)
            return cur.fetchall()
        except:
            return []
    
    if __name__ == '__main__':
        pathfile = 'test.mdb'
        tablename = 'prov'
        conn = mdb_conn(pathfile)
        cur = conn.cursor()
    
        #
        sql = "Insert Into " + tablename + " Values (33, 12, '天津', 0)"
        if mdb_add(conn, cur, sql):
           print("插入成功!")
        else:
           print("插入失败!")
    
        #
        sql = "Delete * FROM " + tablename + " where id = 32"
        if mdb_del(conn, cur, sql):
           print("删除成功!")
        else:
           print("删除失败!")
    
        #
        sql = "Update " + tablename + " Set IsFullName = 1 where ID = 33"
        if mdb_modi(conn, cur, sql):
           print("修改成功!")
        else:
           print("修改失败!")
    
        #
        sql = "SELECT * FROM " + tablename + " where id > 10"
        sel_data = mdb_sel(cur, sql)
        print(sel_data)
    
        cur.close()    #关闭游标
        conn.close()   #关闭数据库连接
  • 相关阅读:
    用的fileupload组件实现的大文件上传
    手机刷机
    Bonferroni correction
    FTP 常用命令
    Oracle 10 参数配置说明
    Solaris 10 ftp,telnet,ssh,sendmail
    solaris10下安装oracle10g
    solaris10中安装oracle内核参数的调整
    matlab从txt/csv文件中读取一行
    SUN服务器Solaris10安装步骤
  • 原文地址:https://www.cnblogs.com/mayi0312/p/6646957.html
Copyright © 2020-2023  润新知