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()