學習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.建立數據庫連接
在學習過程中有什麼不懂得可以加
我的python學習交流扣扣qun,688244617
羣裏有不錯的學習教程、開發工具與電子書籍。
與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容。
#建立數據庫連接
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() #關閉數據庫連接