Python宝典第16章:Python与数据库

本文深入解析Python中利用ODBC、DAO、ADO及MySQL数据库连接方法,涵盖数据库访问核心操作及实例演示,旨在帮助开发者高效管理数据资源。
部署运行你感兴趣的模型镜像

PythonWin中的odbc模块提供了对ODBC的支持。

PythonWin中的dbi模块定义了各种数据类型。


ODBC连接Access:

使用odbc模块首先使用odbc方法连接到数据库,创建一个connection对象,然后使用connection对象的cursor方法创建一个游标,使用游标对象的execute方法执行sql语句。

odbc模块仅提供了对数据的简单操作。

完成操作后,应调用cursor的close方法关闭游标,然后调用connection对象的close方法关闭数据连接。

如果使用了SQL查询语句,可以使用cursor的fetchall, fetchmany或者fetchone来获取返回值。

# -*- coding:utf-8 -*-
# file: pyDB.py
#
import odbc #import odbc module
con=odbc.odbc('podbc') #connection to db
cursor=con.cursor() #create a cursor
cursor.execute('select python_ID, python_name from people where python_ID=1')
r=cursor.fetchall()
print(r)
cursor.execute('insert into people (python_name, python_age, python_sex) values(\'Jee\',21,\'female\')')
cursor.execute('delete from people where python_ID=3')
con.commit() #如果使用支持事务的存储引擎,那么每次操作后,commit是必须的,否则不会真正写入数据库,对应rollback可以进行相应的回滚,但是commit后是无法再rollback的。commit() 可以在执行很多sql指令后再一次调用,这样可以适当提升性能。
cursor.close()
con.close()

DAO连接Access

对于简单的数据应用情况,可以使用Data Access Objects代替ODBC连接数据库

Python中,使用DAO需要使用PythonWin提供的win32com对象,通过它来使用windows的com组件

dbEngine=win32com.client.Dispatch('DAO.DBEngine.35')

dbEngine的OpenDatabase方法打开数据库,返回数据连接;使用OpenRecordset打开表,返回Recordset对象,使用Recordset对数据库进行操作。Recordset对象由Field对象组成,Filed对象表示一列。Fileds表示了所有field对象的集合。

# -*- coding:utf-8 -*-
# file: pyDB.py
#
import win32com.client
dbEnginer=win32com.client.Dispatch('DAO.DBEngine.36')
daoDB=dbEnginer.OpenDatabase('python.mdb')
daoRS=daoDB.OpenRecordset('people')
daoRS.MoveLast()
print(daoRS.RecordCount)
print(daoRS.Fields('python_name').Value)
print(daoRS.Fields('python_age').Value)
print(daoRS.Fields('python_sex').Value)
daoRS.AddNew()
daoRS.Fields('python_name').Value='Kate'
daoRS.Fields('python_age').Value='22'
daoRS.Fields('python_sex').Value='Female'
daoRS.Update()
daoRS.Close()
daoDB.Close()

ADO连接Access

ActiveX Date Objects

# -*- coding:utf-8 -*-
# file: pyDB.py
#
import win32com.client
adoCon=win32com.client.Dispatch('ADODB.Connection')
adoCon.Open('podbc')
adoRS=win32com.client.Dispatch('ADODB.Recordset')
adoRS.Open('['+'people'+']',adoCon,1,3)
adoRS.MoveFirst()
for i in range(adoRS.RecordCount):
    print(adoRS.Fields('python_name').Value)
    print(adoRS.Fields('python_age').Value)
    print(adoRS.Fields('python_sex').Value)
    adoRS.MoveNext()
adoRS.AddNew()
adoRS.Fields('python_name').Value='Kate'
adoRS.Fields('python_age').Value='22'
adoRS.Fields('python_sex').Value='Female'
adoRS.Update()
adoRS.Close()
adoCon.Close()

使用MySQL数据库

# -*- coding:utf-8 -*-
# file: pyDB.py
#
import MySQLdb
db=MySQLdb.connect(host='localhost', user='root', passwd='lydd22208', db='python')
cur=db.cursor()
cur.execute('insert into people (name, age, sex) values (\'Jee\',21,\'F\')')
r=cur.execute('delete from people where age=20')
db.commit()
r=cur.execute('select * from people')
r=cur.fetchall()
print(r)
cur.close()
db.close()


嵌入式数据库SQLite

# -*- coding:utf-8 -*-
# file: pyDB.py
#
import sqlite3
con=sqlite3.connect('C:\\Users\\HP\\Desktop\\sqlite-shell-win32-x86-3080600\\python') #此处不加路径,会报table找不到错误,其实是数据没找到
cur=con.cursor()
cur.execute('insert into people (name, age, sex) values (\'Jee\',21,\'F\')')
r=cur.execute('delete from people where age=20')
con.commit()
cur.execute('select * from people')
s=cur.fetchall()
print(s)
cur.close()
con.close()


您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值