用Python实现数据库编程.docx

上传人:b****4 文档编号:4950758 上传时间:2023-05-07 格式:DOCX 页数:4 大小:19.50KB
下载 相关 举报
用Python实现数据库编程.docx_第1页
第1页 / 共4页
用Python实现数据库编程.docx_第2页
第2页 / 共4页
用Python实现数据库编程.docx_第3页
第3页 / 共4页
用Python实现数据库编程.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用Python实现数据库编程.docx

《用Python实现数据库编程.docx》由会员分享,可在线阅读,更多相关《用Python实现数据库编程.docx(4页珍藏版)》请在冰点文库上搜索。

用Python实现数据库编程.docx

用Python实现数据库编程

用Python实现数据库编程

      老巫  19September,2003    用PYTHON语言进行数据库编程,至少有六种方法可供采用.我在实际项目中采用,不但功能强大,而且方便快捷.以下是我在工作和学习中经验总结.    方法一:

使用DAO(DataAccessObjects)    这个第一种方法可能会比较过时啦.不过还是非常有用的.假设你已经安装好了PYTHONWIN,现在开始跟我上路吧……  找到工具栏上ToolsàCOMMakePyutilities,你会看到弹出一个SelectLibrary的对话框,在列表中选择’MicrosoftDAOObjectLibrary’(或者是你所有的版本).  现在实现对数据的访问:

  #实例化数据库引擎  import  engine=(\    #实例化数据库对象,建立对数据库的连接  db=(r\    现在你有了数据库引擎的连接,也有了数据库对象的实例.现在就可以打开一个recordset了.假设在数据库中已经有一个表叫做‘customers’.为了打开这个表,对其中数据进行处理,我们使用下面的语法:

  rs=(\    #可以采用SQL语言对数据集进行操纵  rs=(\  你也可以采用DAO的execute方法.比如这样:

  (\’bill’\  #注意,删除的数据不能复原了J  EOF等属性也是可以访问的,因此你能写这样的语句:

  whilenot:

  print(\  ()    我最开始采用这个方法,感觉不错.    方法二:

使用PythonDBAPI,PythonODBCmodules(youcanuseODBCAPIdirectly,butmaybeitisdifficultformostbeginner.)  为了在Python里面也能有通用的数据库接口,DB-SIG为我们提供了Python数据库.(欲知详情,访问DB-SIG的网站,/sigs/db-sig/).Mark  Hammond的win32扩展PythonWin里面包含了这些API的一个应用-这个数据库API仅仅开放了一些有限的ODBC函数的功能(那不是它的目的),但是它使用起来很简单,而且在win32里面是的.  安装的步骤如下:

  1.安装python软件包:

  /download/  2.安装MarkHammond的最新版本的pythonwin32扩展-PythonWin:

  /crew/mhammond/  3.安装必要的ODBC驱动程序,用ODBC管理器为你的数据库配置数据源等参数    你的应用程序将需要事先导入两个模块:

  -支持各种各样的SQL数据类型,例如:

日期-dates  –编译产生的ODBC接口    下面有一个例子:

  importdbi,odbc  #导入ODBC模块  importtime  #标准时间模块    dbc=(  #打开一个数据库连接  ’sample/monty/spam’#‘数据源/用户名/密码’  )  crsr=()#产生一个cursor  (  #执行SQL语言  \  SELECTcountry_id,name,insert_change_date  FROMcountry  ORDERBYname  \  )  print‘Columndescriptions:

’#显示行描述  forcolin:

  print‘‘,col  result=()  #一次取出所有的结果  print‘\\nFirstresultrow:

\\n‘,result[0]#显示结果的第一行  print‘\\nDateconversions:

’#看看dbiDate对象如何?

  date=result[0][-1]  fmt=‘%-25s%-20s’  printfmt%(‘standardstring:

’,str(date))  printfmt%(‘secondssinceepoch:

’,float(date))  timeTuple=(date)  printfmt%(‘timetuple:

’,timeTuple)  printfmt%(‘userdefined:

’,(‘%d%B%Y’,timeTuple))  下面是结果:

  -------------------------------输出(output)----------------------------  Columndescriptions:

  (‘country_id’,‘NUMBER’,12,10,10,0,0)  (‘name’,‘STRING’,45,45,0,0,0)  (‘insert_change_date’,‘DATE’,19,19,0,0,1)    Firstresultrow:

  (24L,‘ARGENTINA’,)  Dateconversions:

  standardstring:

  FriDec1901:

51:

531997  secondssinceepoch:

    timetuple:

  (1997,12,19,1,51,53,4,353,0)  userdefined:

  19December1997    大家也可以去/windows/win32/看看,那儿有两个HirendraHindocha写的例子,还不错.    注意,这个例子中,结果值被转化为Python对象了.时间被转化为一个dbiDate对象.这里会有一点限制,因为dbiDate只能表示UNIX时间(1Jan197000:

00:

00GMT)之后的时间.如果你想获得一个更早的时间,可能会出现乱码甚至引起系统崩溃.*_*    方法三:

使用calldll模块  (Usingthismodule,youcanuseODBCAPIdirectly.Butnowthepythonversionis,andIdon’tknowifotherversioniscompatiblewithit.老巫:

-)  SamRushing的calldll模块可以让Python调用任何动态连接库里面的任何函数,厉害吧?

哈.其实,你能够通过直接调用里面的函数操作提供了一个包装模块,就是来做这个事情的.也有代码来管理数据源,安装ODBC,实现和维护数据库引擎(MicrosoftAccess).在那些演示和例子代码中,还有一些让人侧目的好东东,比如,有一个信息循环和窗口过程的Python函数!

    [你可以到Sam’sPythonSoftware去找到calldll的相关连接,那儿还有其他好多有趣的东西]  

  

        下面是安装CALLDLL包的步骤:

  1.安装PYTHON软件包(到现在为止最多支持版本)  2.下载:

  ftp:

///pub/python/python-ext/  3.在LIB路径下面创建一个新路径比如说:

  c:

\\ProgramFiles\\Python\\lib\\caldll\\  4.在原目录下解压  5.移动calldll\\lib\\中所有的文件到上面一个父目录(calldll)里面,删除子目录(lib)  6.在CALL目录里面生成一个file__init__.py文件,象这样:

  #Filetoallowthisdirectorytobetreatedasapython  package.  7.编辑calldll\\:

  在\和\里面,改变\为\    下面是一个怎么使用calldll的例子:

  fromcalldllimportodbc    dbc=().connection()#createconnection  (‘sample’,‘monty’,‘spam’)#connecttodb  #alternatively,usefullconnectstring:

  #_connect(‘DSN=sample;UID=monty;PWD=spam’)  print‘DBMS:

%s%s\\n’%(  #showDBinformation  _info(_DBMS_NAME),  _info(_DBMS_VER)  )  result=(  #executequery&returnresults  \  SELECTcountry_id,name,insert_change_date  FROMcountry  ORDERBYname  \  )  print‘Columndescriptions:

’#showcolumndescriptions  forcolinresult[0]:

  print‘‘,col  print‘\\nFirstresultrow:

\\n‘,result[1]#showfirstresultrow  -------------------------------output(输出)--------------------------------    DBMS:

Oracle    Columndescriptions:

  (‘COUNTRY_ID’,3,10,0,0)  (‘NAME’,12,45,0,0)  (‘INSERT_CHANGE_DATE’,11,19,0,1)    Firstresultrow:

  [‘24’,‘ARGENTINA’,‘1997-12-1901:

51:

53’]    方法四:

使用ActiveXDataObject(ADO)  现在给出一个通过Microsoft’sActiveXDataObjects(ADO)来连接MSAccess2000数据库的实例.使用ADO有以下几个好处:

首先,与DAO相比,它能更快地连接数据库;其次,对于其他各种数据库(SQLServer,Oracle,MySQL,etc.)来说,ADO都是非常有效而方便的;再有,它能用于XML和文件和几乎其他所有数据,因此微软也将支持它比DAO久一些.    第一件事是运行makepy.尽管这不是必须的,但是它对于提高速度有帮助的.而且在PYTHONWIN里面运行它非常简单:

找到工具栏上ToolsàCOMMakePyutilities,你会看到弹出一个SelectLibrary的对话框,在列表中选择’MicrosoftActiveXDataObjectsLibrary‘(或者是你所有的版本).  然后你需要一个数据源名DataSourceName[DSN]和一个连接对象.[我比较喜欢使用DSN-Less连接字符串(与系统数据源名相比,它更能提高性能且优化代码)]就MSAccess来说,你只需要复制下面的DSN即可.对于其他数据库,或者象密码设置这些高级的功能来说,你需要去[ControlPanel控制面板|管理工具AdministrativeTools|数据源DataSources(ODBC)].在那里,你可以设置一个系统数据源DSN.你能够用它作为一个系统数据源名,或者复制它到一个字符串里面,来产生一个DSN-Less的连接字符串.你可以在网上搜索DSN-Less连接字符串的相关资料.好了,这里有一些不同数据库的DSN-Less连接字符串的例子:

SQLServer,Access,FoxPro,Oracle,Oracle,Access,SQLServer,最后是MySQL.  >>>import  >>>conn=(r’’)  >>>DSN=‘PROVIDER=;DATASOURCE=C:

/;’  >>>(DSN)  经过上面的设置之后,就可以直接连接数据库了:

  首要的任务是打开一个数据集/数据表  >>>rs=(r’’)  >>>rs_name=‘MyRecordset’  >>>(‘[‘+rs_name+‘]’,conn,1,3)    [1和3是常数.代表adOpenKeyset和adLockOptimistic.我用它作为默认值,如果你的情况不同的话,或许你应该改变一下.进一步的话题请参考ADO相关材料.]  打开数据表后,你可以检查域名和字段名等等  >>>flds_dict={}  >>>forxinrange():

  ...  flds_dict[x]=(x).Name    字段类型和长度被这样返回A:

  >>>print

(1).Type  202#202isatextfield  >>>print

(1).DefinedSize  50#50Characters    现在开始对数据集进行操作.可以使用SQL语句INSERTINTO或者AddNew()和Update()  >>>()  >>>

(1).Value=‘data’  >>>()    这些值也能够被返回:

  >>>x=

(1).Value  >>>printx  ’data’    因此如果你想增加一条新的记录,不必查看数据库就知道什么number和AutoNumber字段已经产生了  >>>()  >>>x=(‘Auto_Number_Field_Name’).Value  #xcontainstheAutoNumber  >>>(‘Field_Name’).Value=‘data’  >>>()  使用ADO,你也能得到数据库里面所有表名的列表:

  >>>oCat=(r’’)  >>>=conn  >>>oTab=  >>>forxinoTab:

  ...  if==‘TABLE’:

  ...  print    关闭连接.注意这里C是大写,然而关闭文件连接是小写的c.  >>>()

  

  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2