Python论坛  - 讨论区

标题:[python-chinese] 通过 ADODBAPI 或 ADO COM 访问数据库

2004年04月21日 星期三 14:47

liux at gdcn.com liux at gdcn.com
Wed Apr 21 14:47:16 HKT 2004

¸½¼þÖÐÊÇͨ¹ýADODBAPI»òADO COM·ÃÎÊÊý¾Ý¿âµÄPythonʾÀýÔ´Âë¡£ÔÚWindows XP¼òÌåÖÐÎÄ°æ/MS SQL Server2000 Developer Edition/MS Office 2003¼òÌåÖÐÎÄ°æÉϲâÊÔͨ¹ý£¬¿ÉÒÔÕýÈ·ÏÔʾÖÐÎÄ¡£
Ô´ÂëÖÐʹÓÃÁËMSSQLºÍAccessÖеÄNorthwindʾÀýÊý¾Ý¿â¡£Ê¹ÓÃÇ°ÇëºË¶Ô´úÂëÖеÄÁª½Ó×Ö·û´®ÊÇ·ñÓëÇ°»úÆ÷ÉϵĻ·¾³Ïà·û¡£
ÎÒ±àд´úÂëʱʹÓõÄÊÇVIM£¬ÔÚPythonWinµÄIDEÖлáÓÐÂÒÂ룬ÇëʹÓÃIDLE»òVIM/Emacs¡£
µ±È»£¬¸Ã´úÂëÖ»ÄÜÔËÐÐÔÚÖ§³ÖUnicode ±àÂëºÍADOµÄWindows ¼æÈÝƽ̨ÉÏ¡£
ʹÓÃDBAPI 2.0½Ó¿Ú£¬È·Êµ¿ÉÒÔ¼ò»¯´úÂ룬µ«´ÓADODBAPI 2.0.1µÄÔ´ÂëÀ´¿´£¬DBAPI2.0ÌṩµÄ¹¦Äܲ¢²»¶à£¬Èç¹ûÏëÒªÍêÈ«¿ØÖÆADOÊý¾ÝÔ´£¬×îºÃ»¹ÊÇʹÓÃADOCOM¡£
ADODBAPIʾÀý£ºADODBAPITest.py
ADOʾÀý£ºADOTest.py
-------------- next part --------------
# -*- coding: utf-8 -*-

import win32com.client

import adodbapi

#####################################################
#定义转码函数,因为中文数据库通过ADO读取时,会编码为UTF-8(COM的通用字符串编码即
#为UTF-8),所以在这里要先将其编码,才能正确显示。
def EncodeValue(Value):
	if type(Value)==type(u''):
		return Value.encode('UTF-8')
	else:
		return str(Value)

######################################################

#建立联接
#第一个联接字符串是MS SQL Server的,后一个是Access的,请针对具体的机器环境修改字符串中的设置。
#注意:中文版Access中的NorthWind数据库中表名和字段名都是中文的。
#conn=adodbapi.connect(r"Provider=SQLOLEDB.1; User ID=sa; Password=gdcn00430; Initial Catalog=NorthWind;Data Source=Localhost")
conn=adodbapi.connect(r"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Microsoft Office\OFFICE11\SAMPLES\NorthWind.mdb")

#建立操作游标
thecsr=conn.cursor()

#打开产品表,如果使用的是英文版NorthWind示例,可以相应的打开Products表
thecsr.execute(u"SELECT * FROM [产品]")

rst = thecsr.fetchall()
for row in rst:
	for item in row:
		print EncodeValue(item),
	print

thecsr.close
conn.close
-------------- next part --------------
# -*- coding: utf-8 -*-

#####################################################
#定义转码函数,因为中文数据库通过ADO读取时,会编码为UTF-8(COM的通用字符串编码即
#为UTF-8),所以在这里要先将其编码,才能正确显示。
def EncodeValue(Value):
	if type(Value)==type(u''):
		return Value.encode('UTF-8')
	else:
		return str(Value)

######################################################

import win32com.client

import adodbapi

#建立ADO联接,如果需要检查数据库联接成功与否,或者需要使用标准的ADO联接,
#可以使用以下的代码。
try:
	conn=win32com.client.Dispatch("ADODB.Connection")
except:
	raise "Connection对象初始化失败,请检查ADO是否安装正确。"
	pass

try:
	rst=win32com.client.Dispatch("ADODB.Recordset")
except:
	raise "Recordset对象初始化失败,请检查ADO是否安装正确。"
	pass

try:
	cmd=win32com.client.Dispatch("ADODB.Command")
except:
	raise "Command对象初始化失败,请检查ADO是否安装正确。"
	pass

try:
#第一个联接字符串是MS SQL Server的,后一个是Access的,请针对具体的机器环境修改字符串中的设置。
#注意:中文版Access中的NorthWind数据库中表名和字段名都是中文的。
#	conn.Open(r"Provider=SQLOLEDB.1; User ID=sa; Password=...; Initial Catalog=NorthWind;Data Source=Localhost")
	conn.Open(r"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Microsoft Office\OFFICE11\SAMPLES\NorthWind.mdb")
except:
	raise "不能打开数据联接,请检查联接字符串设置是否正确。"
	pass

print conn.ConnectionString

#打开产品表,如果使用的是英文版NorthWind示例,可以相应的打开Products表
CommandText=u"SELECT * FROM [产品]"

rst.Open(CommandText, conn)

rst.MoveFirst()
count = rst.Fields.Count
while not rst.EOF:
	row=[EncodeValue(rst.Fields.Item(i).Value) for i in range(count)]
	for item in row:
		print item,
	print
	rst.MoveNext()

rst.Close()
conn.Close()

-------------- next part --------------
A non-text attachment was scrubbed...
Name: liux.vcf
Type: text/x-vcard
Size: 227 bytes
Desc: Card for <liux at gdcn.com>
Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20040421/17c86e9f/liux.vcf

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年04月21日 星期三 16:23

Zoom.Quiet zoomq at infopro.cn
Wed Apr 21 16:23:47 HKT 2004

Hollo liux:

  咦咦咦!?
很经典的例程是也乎!
收藏!




/******** [2004-04-21]16:23:16 ; you wrote:

liux at gdcn.com> 附件中是通过ADODBAPI或ADO
liux at gdcn.com> COM访问数据库的Python示例源码。在Windows XP简体中文版/MS SQL
liux at gdcn.com> Server2000 Developer Edition/MS Office
liux at gdcn.com> 2003简体中文版上测试通过,可以正确显示中文。
liux at gdcn.com> 源码中使用了MSSQL和Access中的Northwind示例数据库。使用前请核对代码中的联接字符串是否与前机器上的环境相符。
liux at gdcn.com> 我编写代码时使用的是VIM,在PythonWin的IDE中会有乱码,请使用IDLE或VIM/Emacs。
liux at gdcn.com> 当然,该代码只能运行在支持Unicode
liux at gdcn.com> 编码和ADO的Windows 兼容平台上。
liux at gdcn.com> 使用DBAPI
liux at gdcn.com> 2.0接口,确实可以简化代码,但从ADODBAPI
liux at gdcn.com> 2.0.1的源码来看,DBAPI2.0提供的功能并不多,如果想要完全控制ADO数据源,最好还是使用ADOCOM。
liux at gdcn.com> ADODBAPI示例:ADODBAPITest.py
liux at gdcn.com> ADO示例:ADOTest.py


********************************************/

-- 
Free as in Freedom

 Zoom.Quiet                           

#=========================================#
]Time is unimportant, only life important![
#=========================================#

sender is the Bat!2.02 CE



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年04月22日 星期四 09:57

千里马肝 tlovexyj at 21cn.com
Thu Apr 22 09:57:37 HKT 2004

python-chinese,您好!

	请问yield的用法!谢谢!

        致
礼!
 				

        千里马肝
        tlovexyj at 21cn.com
          2004-04-21

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年04月22日 星期四 12:40

Who Bruce whoonline at msn.com
Thu Apr 22 12:40:24 HKT 2004

呵呵,今天怎么大家都没发邮件啦。出个小题目吧,有字符串
s="%C6%E6%D5%E4%D2%EC%B1%A6"
怎样由它得到列表
l=["%C6","%E6","%D5","%E4","%D2","%EC","%B1","%A6"]

解法很多,要最简单的。




[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号