使用Python对Access读写操作


Posted in Python onMarch 30, 2017

学习Python的过程中,我们会遇到Access的读写问题,这时我们可以利用win32.client模块的COM组件访问功能,通过ADODB操作Access的文件。

需要下载安装pywin32与AccessDatabaseEngine.exe

pywin32下载地址:https://3water.com/softs/695840.html

AccessDatabaseEngine.exe下载 https://3water.com/softs/291508.html

64位下载:https://3water.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 = 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 ? and client_age < ?", ('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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
Python中的startswith和endswith函数使用实例
Aug 25 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
Python进程间通信Queue实例解析
Jan 25 Python
Python的iOS自动化打包实例代码
Nov 22 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
python下载库的步骤方法
Oct 12 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
python实现简单贪吃蛇游戏
Sep 29 Python
win10+anaconda安装yolov5的方法及问题解决方案
Apr 29 Python
Python FuzzyWuzzy实现模糊匹配
Apr 28 Python
使用Python对Excel进行读写操作
Mar 30 #Python
浅述python中argsort()函数的实例用法
Mar 30 #Python
Windows下安装python2和python3多版本教程
Mar 30 #Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 #Python
python类的继承实例详解
Mar 30 #Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 #Python
python下读取公私钥做加解密实例详解
Mar 29 #Python
You might like
基于PHP常用函数的用法详解
2013/05/10 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Apache部署Django项目图文详解
2019/07/30 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
python 如何停止一个死循环的线程
2020/11/24 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
渗透攻击的测试步骤
2014/06/07 面试题
集体婚礼证婚词
2014/01/13 职场文书
青年文明号复核材料
2014/02/11 职场文书
在校实习生求职信
2014/06/18 职场文书
会议简讯范文
2015/07/20 职场文书