学习Python的过程中,我们会遇到Access的读写问题,这时我们可以利用win32.client模块的COM组件访问功能,通过ADODB操作Access的文件。
需要下载安装pywin32与AccessDatabaseEngine.exe
pywin32下载地址:https://www.jb51.net/softs/695840.html
AccessDatabaseEngine.exe下载 https://www.jb51.net/softs/291508.html
64位下载:https://www.jb51.net/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 = 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()
补充
如果是python3好像需要用到pypyodbc
# 话不多说,码上见分晓!
使用模块: pypyodbc
例子和安装详见:
https://github.com/jiangwen365/pypyodbc/
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" import time import 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 DB import 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 query connStr = ( 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 variable cursor.execute("select client_name, client_lastname, [phone number] " "from Clients where client_id like ", ('01-01-00%', )) # Sample, passing more than one parameter cursor.execute("select client_name, client_lastname, [phone number] " "from Clients where client_id like ", ('01-01-00%', 28)) # Method 1, simple reading using cursor while 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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 群星《魅音绝唱》黑胶CD【WAV】
- 腾格尔.2002-四十独白【风潮】【WAV+CUE】
- 陈明真.1992-到哪里找那么好的人【华星】【WAV+CUE】
- 黄凯芹.2012-廿五年3CD【环球】【WAV+CUE】
- 证声音乐图书馆《七夕 爵士情缘》[320K/MP3][64.8MB]
- 证声音乐图书馆《七夕 爵士情缘》[FLAC/分轨][327.79MB]
- 杨泰瑞《City Boy》[320K/MP3][28.71MB]
- 胡彦斌《失业情歌》首版[WAV+CUE]
- 杨泰瑞《City Boy》[FLAC/分轨][159.66MB]
- APM亚流新世代《一起冒险》[320K/MP3][68.66MB]
- FIM《天伦乐》(DaydreamsAndLullabies)24K金碟[WAV+CUE]
- 【雨果唱片】中国管弦乐《鹿回头》
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]