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