使用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实现文件名批量替换和内容替换
Mar 20 Python
Python编写Windows Service服务程序
Jan 04 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
python模块导入的细节详解
Dec 10 Python
Python爬虫文件下载图文教程
Dec 23 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
python3 写一个WAV音频文件播放器的代码
Sep 27 Python
Django用户身份验证完成示例代码
Apr 03 Python
Python基于gevent实现高并发代码实例
May 15 Python
python/golang实现循环链表的示例代码
Sep 14 Python
java关于string最常出现的面试题整理
Jan 18 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实现随机显示图片方法汇总
2015/05/21 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
JS实现self的resend
2010/07/22 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
详解angular element()方法使用
2017/04/08 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
Python实现的金山快盘的签到程序
2013/01/17 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
Python识别验证码的实现示例
2020/09/30 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
高中数学教学反思范文
2016/02/18 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS