使用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的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
python reduce 函数使用详解
Dec 05 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
python邮件发送smtplib使用详解
Jun 16 Python
python递归全排列实现方法
Aug 18 Python
python实现网页自动签到功能
Jan 21 Python
详解python tkinter教程-事件绑定
Mar 28 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 Python
Django serializer优化类视图的实现示例
Jul 16 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 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实现MySQL更新记录的代码
2008/06/07 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
php DES加密算法实例分析
2019/09/18 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
python实现二维码扫码自动登录淘宝
2016/12/27 Python
Python实现选择排序
2017/06/04 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
python把一个字符串切开的实例方法
2020/09/27 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
英国电子专家:maplin
2019/09/04 全球购物
业务员简历自我评价
2014/03/06 职场文书
婚假请假条怎么写
2014/04/10 职场文书
护士先进个人总结
2015/02/13 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
小马王观后感
2015/06/11 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL
python如何正确使用yield
2021/05/21 Python
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL