使用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()   #關閉數據庫連接

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM