使用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 自动安装 Rising 杀毒软件
Apr 24 Python
Python编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
python使用pil生成缩略图的方法
Mar 26 Python
python获取外网ip地址的方法总结
Jul 02 Python
python3 图片referer防盗链的实现方法
Mar 12 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python用pandas数据加载、存储与文件格式的实例
Dec 07 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
python错误调试及单元文档测试过程解析
Dec 19 Python
Python手动或自动协程操作方法解析
Jun 22 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 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/05 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
document.createElement()用法
2013/03/13 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
JS实现购物车特效
2017/02/02 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python实现代码统计工具
2019/09/19 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
numba提升python运行速度的实例方法
2021/01/25 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
公民代理授权委托书
2014/09/24 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
党员民主生活会材料
2014/12/15 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书