學習Python的過程中,我們會遇到Access的讀寫問題,這時我們可以利用win32.client模塊的COM組件訪問功能,通過ADODB操作Access的文件。
需要下載安裝pywin32與AccessDatabaseEngine.exe
pywin32下載地址:http://m.survivalescaperooms.com/softs/695840.html
AccessDatabaseEngine.exe下載 http://m.survivalescaperooms.com/softs/291508.html
64位下載:http://m.survivalescaperooms.com/softs/291504.html
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 = 0while 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()
補充
如果是python3好像需要用到pypyodbc
# 話不多說,碼上見分曉!
使用模塊: pypyodbc
例子和安裝詳見:
https://github.com/jiangwen365/pypyodbc/
#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ = "loki"import timeimport pypyodbc as mdb# 連接mdb文件connStr = (r'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/MDB_demo/demo.mdb;' r'Database=bill;' )conn = mdb.win_connect_mdb(connStr)# connStr = (# r'Driver={SQL Sever};'# r'Server=sqlserver;'# r'Database=bill;'# r'UID=sa;'# r'PWD=passwd'# )## conn = mdb.connect(connStr)# 創建游標cur = conn.cursor()cur.execute('SELECT * FROM bill;')for col in cur.description: # 展示行描述 print(col[0], col[1])result = cur.fetchall()for row in result: # 展示個字段的值 print(row) print(row[1], row[2]官方給的例子mdb
# Microsoft Access DBimport pypyodbc connection = pypyodbc.win_create_mdb('D://database.mdb')SQL = 'CREATE TABLE saleout (id COUNTER PRIMARY KEY,product_name VARCHAR(25));'connection.cursor().execute(SQL)connection.close()#SQL Server 2000/2005/2008 (and probably 2012 and 2014)
#SQL Server 2000/2005/2008 (and probably 2012 and 2014)import pypyodbc as pyodbc # you could alias it to existing pyodbc code (not every code is compatible)db_host = 'serverhost'db_name = 'database'db_user = 'username'db_password = 'password'connection_string = 'Driver={SQL Server};Server=' + db_host + ';Database=' + db_name + ';UID=' + db_user + ';PWD=' + db_password + ';'db = pyodbc.connect(connection_string)SQL = 'CREATE TABLE saleout (id COUNTER PRIMARY KEY,product_name VARCHAR(25));'db.cursor().execute(SQL)# Doing a simple SELECT queryconnStr = ( r'Driver={SQL Server};' r'Server=sqlserver;' #r'Server=127.0.0.1,52865;' + #r'Server=(local)/SQLEXPRESS;' r'Database=adventureworks;' #r'Trusted_Connection=Yes;' r'UID=sa;' r'PWD=sapassword;' )db = pypyodbc.connect(connStr)cursor = db.cursor()# Sample with just a raw query:cursor.execute("select client_name, client_lastname, [phone number] from Clients where client_id like '01-01-00%'")# Using parameters (IMPORTANT: YOU SHOULD USE TUPLE TO PASS PARAMETERS)# Python note: a tuple with just one element must have a trailing comma, otherwise is just a enclosed variablecursor.execute("select client_name, client_lastname, [phone number] ""from Clients where client_id like ?", ('01-01-00%', ))# Sample, passing more than one parametercursor.execute("select client_name, client_lastname, [phone number] ""from Clients where client_id like ? and client_age < ?", ('01-01-00%', 28))# Method 1, simple reading using cursorwhile True: row = cursor.fetchone() if not row: break print("Client Full Name (phone number): ", row['client_name'] + ' ' + row['client_lastname'] + '(' + row['phone number'] + ')')# Method 2, we obtain dict's all records are loaded at the same time in memory (easy and verbose, but just use it with a few records or your app will consume a lot of memory), was tested in a modern computer with about 1000 - 3000 records just fine...import pprint; pp = pprint.PrettyPrinter(indent=4)columns = [column[0] for column in cursor.description]for row in cursor.fetchall(): pp.pprint(dict(zip(columns, row)))# Method 3, we obtain a list of dict's (represents the entire query)query_results = [dict(zip([column[0] for column in cursor.description], row)) for row in cursor.fetchall()]pp.pprint(query_results)# When cursor was used must be closed, if you will not use again the db connection must be closed too.cursor.close()db.close()How to use it without install (the latest version from here)
Just copy the latest pypyodbc.py downloaded from this repository on your project folder and import the module.
Install
If you have pip available (keep in mind that the version on pypi may be old):
pip install pypyodbc
Or get the latest pypyodbc.py script from GitHub (Main Development site)
python setup.py install
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!
新聞熱點
疑難解答
圖片精選