怎么用python写数据库_Python实现数据库编程方法详解

怎么用python写数据库_Python实现数据库编程方法详解

2023年7月10日发(作者:)

怎么⽤python写数据库_Python实现数据库编程⽅法详解本⽂实例讲述了Python实现数据库编程⽅法。分享给⼤家供⼤家参考。具体分析如下:⽤PYTHON语⾔进⾏数据库编程, ⾄少有六种⽅法可供采⽤. 我在实际项⽬中采⽤,不但功能强⼤,⽽且⽅便快捷.以下是我在⼯作和学习中经验总结.⽅法⼀:使⽤DAO (Data Access Objects)这个第⼀种⽅法可能会⽐较过时啦.不过还是⾮常有⽤的. 假设你已经安装好了PYTHONWIN,现在开始跟我上路吧……找到⼯具栏上ToolsàCOM MakePy utilities,你会看到弹出⼀个Select Library的对话框, 在列表中选择'Microsoft DAO 3.6 ObjectLibrary'(或者是你所有的版本).现在实现对数据的访问:#实例化数据库引擎import engine = ch("ne.35")#实例化数据库对象,建⽴对数据库的连接db = tabase(r"c:/temp/")现在你有了数据库引擎的连接,也有了数据库对象的实例.现在就可以打开⼀个recordset了. 假设在数据库中已经有⼀个表叫做 'customers'.为了打开这个表,对其中数据进⾏处理,我们使⽤下⾯的语法:rs = cordset("customers")#可以采⽤SQL语⾔对数据集进⾏操纵rs = cordset("select * from customers where state = 'OH'")你也可以采⽤DAO的execute⽅法. ⽐如这样:e("delete * from customers where balancetype = 'overdue' and name = 'bill'")#注意,删除的数据不能复原了JEOF 等属性也是可以访问的, 因此你能写这样的语句:while not :print ("State").xt()我最开始采⽤这个⽅法,感觉不错.⽅法⼆:使⽤Python DB API,Python ODBC modules(you can use ODBC API directly, but maybe it is difficult for mostbeginner.)Hammond的win32扩展PythonWin⾥⾯包含了这些API的⼀个应⽤-. 这个数据库API仅仅开放了⼀些有限的ODBC函数的功能(那不是它的⽬的),但是它使⽤起来很简单,⽽且在win32⾥⾯是免费的.安装的步骤如下:1. 安装python软件包:2. 安装Mark Hammond的最新版本的python win32扩展 - PythonWin:3. 安装必要的ODBC驱动程序,⽤ODBC管理器为你的数据库配置数据源等参数你的应⽤程序将需要事先导⼊两个模块: - ⽀持各种各样的SQL数据类型,例如:⽇期- – 编译产⽣的ODBC接⼝下⾯有⼀个例⼦:import dbi, odbc # 导⼊ODBC模块import time # 标准时间模块dbc = ( # 打开⼀个数据库连接'sample/monty/spam' # '数据源/⽤户名/密码')crsr = () # 产⽣⼀个e( # 执⾏SQL语⾔"""SELECT country_id, name, insert_change_dateFROM countryORDER BY name""")print 'Column descriptions:' # 显⽰⾏描述for col in ption:print ' ', colresult = ll() # ⼀次取出所有的结果print '/nFirst result row:/n ', result[0] # 显⽰结果的第⼀⾏print '/nDate conversions:' # 看看dbiDate对象如何?date = result[0][-1]fmt = ' %-25s%-20s'print fmt % ('standard string:', str(date))print fmt % ('seconds since epoch:', float(date))timeTuple = ime(date)print fmt % ('time tuple:', timeTuple)print fmt % ('user defined:', me('%d %B %Y', timeTuple))下⾯是结果:输出(output)Column descriptions:('country_id', 'NUMBER', 12, 10, 10, 0, 0)('name', 'STRING', 45, 45, 0, 0, 0)('insert_change_date', 'DATE', 19, 19, 0, 0, 1)First result row:(24L, 'ARGENTINA', )Date conversions:standard string: Fri Dec 19 01:51:53 1997seconds since epoch: 882517913.0time tuple: (1997, 12, 19, 1, 51, 53, 4, 353, 0)user defined: 19 December 1997注意, 这个例⼦中,结果值被转化为Python对象了.时间被转化为⼀个dbiDate对象.这⾥会有⼀点限制,因为dbiDate只能表⽰UNIX时间(1 Jan1970 00:00:00 GMT)之后的时间.如果你想获得⼀个更早的时间,可能会出现乱码甚⾄引起系统崩溃.*_*⽅法三: 使⽤ calldll模块(Using this module, you can use ODBC API directly. But now the python version is 2.1, and I don't know if other version iscompatible with it. ⽼巫:-)Sam Rushing的calldll模块可以让Python调⽤任何动态连接库⾥⾯的任何函数,厉害吧?哈.其实,你能够通过直接调⽤⾥⾯的函数操作提供了⼀个包装模块,就是来做这个事情的.也有代码来管理数据源,安装ODBC,实现和维护数据库引擎(Microsoft Access).在那些演⽰和例⼦代码中,还有⼀些让⼈侧⽬的好东东,⽐如,有⼀个信息循环和窗⼝过程的Python函数![你可以到Sam's Python Software去找到calldll的相关连接,那⼉还有其他好多有趣的东西]下⾯是安装CALLDLL包的步骤:1. 安装PYTHON软件包(到现在为⽌最多⽀持2.1版本)2. 下载:ftp:///pub/python/python-ext/3. 在LIB路径下⾯创建⼀个新路径⽐如说:c:/Program Files/Python/lib/caldll/4. 在原⽬录下解压5. 移动calldll/lib/中所有的⽂件到上⾯⼀个⽗⽬录(calldll)⾥⾯,删除⼦⽬录(lib)6. 在CALL⽬录⾥⾯⽣成⼀个file __init__.py⽂件,象这样:# File to allow this directory to be treated as a python 1.5package.7. 编辑calldll/:在"get_info_word"和"get_info_long"⾥⾯,改变""为""下⾯是⼀个怎么使⽤calldll的例⼦:from calldll import odbcdbc = nment().connection() # create t('sample', 'monty', 'spam') # connect to db# alternatively, use full connect string:# _connect('DSN=sample;UID=monty;PWD=spam')print 'DBMS: %s %s/n' % ( # show DB _info(_DBMS_NAME),_info(_DBMS_VER))result = ( # execute query & return results"""SELECT country_id, name, insert_change_dateFROM countryORDER BY name""")print 'Column descriptions:' # show column descriptionsfor col in result[0]:print ' ', colprint '/nFirst result row:/n ', result[1] # show first result rowoutput(输出)DBMS: Oracle 07.30.0000Column descriptions:('COUNTRY_ID', 3, 10, 0, 0)('NAME', 12, 45, 0, 0)('INSERT_CHANGE_DATE', 11, 19, 0, 1)First result row:['24', 'ARGENTINA', '1997-12-19 01:51:53']⽅法四: 使⽤ActiveX Data Object(ADO)现在给出⼀个通过Microsoft's ActiveX Data Objects (ADO)来连接MS Access 2000数据库的实例.使⽤ADO有以下⼏个好处: ⾸先,与DAO相⽐,它能更快地连接数据库;其次,对于其他各种数据库(SQL Server, Oracle, MySQL, etc.)来说,ADO都是⾮常有效⽽⽅便的;再有,它能⽤于XML和⽂本⽂件和⼏乎其他所有数据,因此微软也将⽀持它⽐DAO久⼀些.第⼀件事是运⾏makepy.尽管这不是必须的,但是它对于提⾼速度有帮助的.⽽且在PYTHONWIN⾥⾯运⾏它⾮常简单: 找到⼯具栏上ToolsàCOM MakePy utilities,你会看到弹出⼀个Select Library的对话框, 在列表中选择'Microsoft ActiveX Data Objects 2.5 Library‘(或者是你所有的版本).然后你需要⼀个数据源名Data Source Name [DSN] 和⼀个连接对象. [我⽐较喜欢使⽤DSN-Less 连接字符串 (与系统数据源名相⽐,它更能提⾼性能且优化代码)]就MS Access来说,你只需要复制下⾯的DSN即可.对于其他数据库,或者象密码设置这些⾼级的功能来说,你需要去 [Control Panel控制⾯板| 管理⼯具Administrative Tools | 数据源Data Sources (ODBC)]. 在那⾥,你可以设置⼀个系统数据源DSN. 你能够⽤它作为⼀个系统数据源名,或者复制它到⼀个字符串⾥⾯,来产⽣⼀个DSN-Less 的连接字符串. 你可以在⽹上搜索DSN-Less 连接字符串的相关资料. 好了,这⾥有⼀些不同数据库的DSN-Less连接字符串的例⼦:SQL Server, Access, FoxPro, Oracle , Oracle, Access, SQL Server, 最后是MySQL.>>> import >>> conn = ch(r'tion')>>> DSN = 'PROVIDER=.4.0;DATA SOURCE=C:/;'>>> (DSN)经过上⾯的设置之后,就可以直接连接数据库了:⾸要的任务是打开⼀个数据集/数据表>>> rs = ch(r'set')>>> rs_name = 'MyRecordset'>>> ('[' + rs_name + ']', conn, 1, 3)[1和3是常数.代表adOpenKeyset 和adLockOptimistic.我⽤它作为默认值,如果你的情况不同的话,或许你应该改变⼀下.进⼀步的话题请参考ADO相关材料.]打开数据表后,你可以检查域名和字段名等等>>> flds_dict = {}>>> for x in range():... flds_dict[x] = (x).Name字段类型和长度被这样返回A :>>> print (1).Type202 # 202 is a text field>>> print (1).DefinedSize50 # 50 Characters现在开始对数据集进⾏操作.可以使⽤SQL语句INSERT INTO或者AddNew() 和Update()>>> ()>>> (1).Value = 'data'>>> ()这些值也能够被返回:>>> x = (1).Value>>> print x'data'因此如果你想增加⼀条新的记录,不必查看数据库就知道什么number 和AutoNumber 字段已经产⽣了>>> ()>>> x = ('Auto_Number_Field_Name').Value# x contains the AutoNumber>>> ('Field_Name').Value = 'data'>>> ()使⽤ADO,你也能得到数据库⾥⾯所有表名的列表:>>> oCat = ch(r'g')>>> Connection = conn>>> oTab = >>> for x in oTab:... if == 'TABLE':... print 关闭连接. 注意这⾥C是⼤写,然⽽关闭⽂件连接是⼩写的c.>>> ()前⾯提到,可以使⽤SQL语句来插⼊或者更新数据,这时我们直接使⽤⼀个连接对象.>>> conn = ch(r'tion')>>> DSN = 'PROVIDER=.4.0;DATA SOURCE=C:/;'>>> sql_statement = "INSERT INTO [Table_Name]([Field_1], [Field_2]) VALUES ('data1', 'data2')">>> (DSN)>>> e(sql_statement)>>> ()最后⼀个例⼦经常被看作是ADO的难点.⼀般说来,想要知道⼀个表的RecordCount 的话,必须象这样⼀个⼀个地计算他们 :>>> # See example 3 above for the set-up to this>>> rst()>>> count = 0>>> while 1:... if :... else:... count = count + 1... xt()如果你也象上⾯那样些程序的话,⾮常底效不说,如果数据集是空的话,移动第⼀个记录的操作会产⽣⼀个错误.ADO提供了⼀个⽅法来纠正它.在打开数据集之前,设置CursorLocation 为3. 打开数据集之后,就可以知道recordcount了.>>> location = 3 # don't use parenthesis here>>> ('SELECT * FROM [Table_Name]', conn) # be sure conn is open>>> Count # no parenthesis here either186[再:3是常数]这些只⽤到ADO的⽪⽑功夫,但对于从PYTHON来连接数据库,它还是应该有帮助的.想更进⼀步学习的话,建议深⼊对象模型.下⾯是⼀些连接:(单步执⾏还可以,为何写为script就不⾏?⽼巫疑惑)⽅法五:使⽤ mxODBC模块(在Windows和Unix下⾯都可以⽤,但是是商业化软件,要掏钱的.)下⾯是相关连接:⽅法六: 对具体的数据库使⽤特定的PYTHON模块MySQL数据库à MySQLdb模块,下载地址为:PostgresSQL数据库àpsycopg模块希望本⽂所述对⼤家的Python程序设计有所帮助。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688931184a184772.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信