使用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实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
详解Python文件修改的两种方式
Aug 22 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Python生成词云的实现代码
Jan 14 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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批量生成随机用户名
2008/07/10 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
php去除重复字的实现代码
2011/09/16 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
javascript window对象属性整理
2009/10/24 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
敏捷开发的主要原则都有哪些
2015/04/26 面试题
ajax是什么及其工作原理
2012/02/08 面试题
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
期末考试动员演讲稿
2014/01/10 职场文书
买卖车协议书
2014/04/21 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Windows7下FTP搭建图文教程
2022/08/05 Servers