海上月明

editer by sun
posts - 162, comments - 51, trackbacks - 0, articles - 8
   :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

python with ADO 的几点笔记

Posted on 2008-02-28 21:45 pts 阅读(2029) 评论(0)  编辑  收藏 所属分类: DataBasePython
1、几个重要的ADO对象:
    首先
    from win32com.client import Dispatch
    1.1、connection:
                conn=Dispatch(r‘ADODB.Connection')
                conn.ConnectionString可用值
                conn.Open()
Database Engine ConnectionString
DBASE (using ODBC) Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=C:\path\to\database
Excel (using ODBC) Driver={Microsoft Excel Driver (*.xls)};DriverID=790;Dbq=C:\path\to\spreadsheet;DefaultDir=C:\path\to\defaultdir
Excel (using OLE DB) Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Path\To\sheet.xls;
Access (using ODBC) Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\path\to\database.mdb;Uid=username;Pwd=password

You can also pass additional options -- for example Exclusive=1; sets it to be opened in exclusive mode.
Access (using OLE DB) Using standard security
PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\to\database.mdb;User Id=username;Password=somepassword;
(经测试,如果Access加密了,使用下面的connstring可以成功连接:
PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\to\database.mdb;Jet OLEDB:Databse Password=pwd;
)
Using Workgroup security
str="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=database.mdb;JET OLEDB:System Database=mysystem.mdw;"
oConn.Open(str, "my_user_name", "my_password")
Firebird Remote Database
Provider='LCPI.IBProvider';Data Source='remotehost:C:\path\to\database.fdb';User ID='username';Password='pwd';Auto Commit=true;

The above is reported to work for a Firebird database by Edward Diamond (ediamond at water dot ca dot gov). I would presume that it could work on a local Firebird server, simply by removing "remotehost" from the string above. Edward reports that even simple queries don't work without the "Auto Commit" part in the connection string.
MySQL (using ODBC) Local Database
Driver={MySQL ODBC 3.51 Driver};Server=localhost;User=username;Password=mypassword;Database=mydatabase;

Remote Database
Driver={MySQL ODBC 3.51 Driver};Server=192.168.1.100;Port=3306;User=username;Password=mypassword;Database=mydatabase;

There are more parameters that can be set (for example, Option, which controls several connection properties such as logging, packet size limits etc.) See section 3.3 (Connection Parameters) of the MyODBC manual for more information.
MySQL (using OLE DB) Provider=MySQLProv;Server=192.168.1.100;Port=3306;User=username;Password=mypassword;Database=mydatabase;

If you have the datasource already set up:
Provider=MySQLProv;Data Source=name_of_datasource;

You will need to download and install MyOleDB first. Last time I checked MyOLEDB was no longer maintained.
Oracle (using ODBC) Driver={Microsoft ODBC for Oracle};Server=MyOracleServer;Uid=username;Pwd=password

See the MSDN library for additional options.
Oracle (using OLE DB) Using OLE DB provider from Microsoft
Provider=MSDAORA;Data Source=MyOracleDB;User Id=username;Password=password
See the MSDN library for additional options.

Using OLE DB provider from Oracle
Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=username;Password=password
SQL Server (using ODBC) Standard Security
Driver={SQL Server};Server=192.168.1.100;Uid=username;Pwd=password;Database=dbname;

Trusted Connection
Simply add Trusted_Connection=yes to the above string.

See MSDN Library for more options.
SQL Server (using OLE DB) Provider=SQLOLEDB.1;Data Source=192.168.1.100;Uid=username;Pwd=password;Database=dbname;

See MSDN Library for more options.
   
       1.2、command对象
             cmd=Dispatch(r'ADODB.Command')
             cmd对象的几个属性设置及可用属性值:
                   CommandTyte:
常量 说明
adCmdUnspecified -1 不指定命令类型的参数。
adCmdText 1 按命令或存储过程调用的文本定义计算 CommandText。
adCmdTable 2 按表名计算 CommandText,该表的列全部是由内部生成的 SQL 查询返回的。
adCmdStoredProc 4 按存储过程名计算 CommandText
adCmdUnknown 8 默认值。指示 CommandText 属性中命令的类型未知。
adCmdFile 256 按持久存储的 Recordset 的文件名计算 CommandText
adCmdTableDirect 512 按表名计算 CommandText,该表的列被全部返回。

                  CommandText:定义命令(例如 SQL 语句)的可执行文本
                  Prepared:Prepared 属性将提供者保存为查询的已准备好(或已编译)版本,该查询是第一次执行 Command对象前在CommandText属性中指定的。这可能会降低命令第一次执行的速度,但一旦提供者编译一个命令后,便可将命令的编译版本用于所有后续的执行中,这样便可提高性能。 如果该属性为 False,提供者将直接执行 Command 对象而不创建编译版本。如果提供者不支持命令准备,则一旦将此属性设置为 True,提供者便可能返回错误。如果它不返回错误,则仅忽略准备命令的请求,并将 Prepared 属性设置为 False。  
                 CommandTimeout: 属性设置提供者等待命令执行的秒数

       1.3、Parameter对象
             para1=cmd.CreateParameter(Name, Type, Direction, Size, Value
                       Name   可选。String 值,包含 Parameter 对象的名称。
                       Type   可选。DataTypeEnum 值,指定 Parameter 对象的数据类型。
                       Direction   可选。ParameterDirectionEnum 值,指定 Parameter 对象的类型。
                       Size   可选。Long 值,指定参数值的最大长度(以字符或字节为单位)。
                       Value   可选。Variant,指定 Parameter 对象的值。
                           DataTypeEnum 可用值:
常量 说明
AdArray
(不适用于 ADOX。)
0x2000 一个标志值,通常与另一个数据类型常量组合,指示该数据类型的数组。
adBigInt 20 指示一个八字节的有符号整数 (DBTYPE_I8)。
adBinary 128 指示一个二进制值 (DBTYPE_BYTES)。
adBoolean 11 指示一个布尔值 (DBTYPE_BOOL)。
adBSTR 8 指示以 Null 终止的字符串 (Unicode) (DBTYPE_BSTR)。
adChapter 136 指示一个四字节的子集值,标识子行集合中的行 (DBTYPE_HCHAPTER)。
adChar 129 指示一个字符串值 (DBTYPE_STR)。
adCurrency 6 指示一个货币值 (DBTYPE_CY)。货币是一个定点数字,小数点右侧有四位数字。该值存储为八字节、范围为 10,000 的有符号整数。
adDate 7 指示日期值 (DBTYPE_DATE)。日期保存为双精度数,数字的整数部分是从 1899 年 12 月 30 日算起的天数,小数部分是一天当中的片段时间。
adDBDate 133 指示日期值 (yyyymmdd) (DBTYPE_DBDATE)。
adDBTime 134 指示时间值 (hhmmss) (DBTYPE_DBTIME)。
adDBTimeStamp 135 指示日期/时间戳(yyyymmddhhmmss 加十亿分之一的小数)(DBTYPE_DBTIMESTAMP)。
adDecimal 14 指示具有固定精度和范围的确切数字值 (DBTYPE_DECIMAL)。
adDouble 5 指示一个双精度浮点值 (DBTYPE_R8)。
adEmpty 0 指定没有值 (DBTYPE_EMPTY)。
adError 10 指示一个 32 位的错误代码 (DBTYPE_ERROR)。
adFileTime 64 指示一个 64 位的值,表示从 1601 年 1 月 1 日开始的 100 个十亿分之一秒间隔的数量 (DBTYPE_FILETIME)。
adGUID 72 指示全局唯一标识符 (GUID) (DBTYPE_GUID)。
adIDispatch 9 指示指向 COM 对象上 IDispatch 接口的指针 (DBTYPE_IDISPATCH)。

注意   ADO 目前不支持这种数据类型。使用它可能导致不可预料的结果。

adInteger 3 指示一个四字节的有符号整数 (DBTYPE_I4)。
adIUnknown 13 指示指向 COM 对象上 IUnknown 接口的指针 (DBTYPE_IUNKNOWN)。

注意   ADO 目前不支持这种数据类型。使用它可能导致不可预料的结果。

adLongVarBinary 205 指示一个长二进制值(仅限于 Parameter 对象)。
adLongVarChar 201 指示一个长字符串值(仅限于 Parameter 对象)。
adLongVarWChar 203 指示一个以 Null 终止的长 Unicode 字符串值(仅限于 Parameter 对象)。
adNumeric 131 指示具有固定精度和范围的确切数字值 (DBTYPE_NUMERIC)。
adPropVariant 138 指示一个 Automation PROPVARIANT (DBTYPE_PROP_VARIANT)。
adSingle 4 指示一个单精度浮点值 (DBTYPE_R4)。
adSmallInt 2 指示一个双字节的有符号整数 (DBTYPE_I2)。
adTinyInt 16 指示一个单字节的有符号整数 (DBTYPE_I1)。
adUnsignedBigInt 21 指示一个八字节的无符号整数 (DBTYPE_UI8)。
adUnsignedInt 19 指示一个四字节的无符号整数 (DBTYPE_UI4)。
adUnsignedSmallInt 18 指示一个双字节的无符号整数 (DBTYPE_UI2)。
adUnsignedTinyInt 17 指示一个单字节的无符号整数 (DBTYPE_UI1)。
adUserDefined 132 指示一个用户定义的变量 (DBTYPE_UDT)。
adVarBinary 204 指示一个二进制值(仅限于 Parameter 对象)。
adVarChar 200 指示一个字符串值(仅限于 Parameter 对象)。
adVariant 12 指示一个 Automation Variant (DBTYPE_VARIANT)。

注意   ADO 目前不支持这种数据类型。使用它可能导致不可预料的结果。

adVarNumeric 139 指示一个数字值(仅限于 Parameter 对象)。
adVarWChar 202 指示一个以 Null 终止的 Unicode 字符串(仅限于 Parameter 对象)。
adWChar 130 指示一个以 Null 终止的 Unicode 字符串 (DBTYPE_WSTR)。

                                ParameterDirectionEnum可用值:
常量 说明
adParamInput 1 默认值。指示该参数是输入参数。
adParamInputOutput 3 指示该参数既是输入参数,又是输出参数。
adParamOutput 2 指示该参数是输出参数。
adParamReturnValue 4 指示该参数是返回值。
adParamUnknown 0 指示该参数的方向未知。
                     
                      设定好后加入到cmd的parameters中:
                          cmd.Parameters.Append(para1)
                      设定para1的值:
                          para1.Value=***
                      执行cmd:
                         (rst,result)=cmd.Execute()
                        
             1.4、recordset对象:
                      rst=Dispatch(r'ADODB.Recordset')
                      rst对象在Open前可设置游标类型:
          • 动态游标 adOpenDynamic— 用于查看其他用户所作的添加、更改和删除;用于 Recordset(不依赖于书签)中的所有移动类型;如果提供者支持,还可用于书签。
          • 键集游标 adOpenKeyset — 其行为类似动态游标,不同的只是它禁止查看其他用户添加的记录,并且禁止访问其他用户删除的记录。其他用户所作的数据更改依然可见。它始终支持书签,因此允许 Recordset 中的所有移动类型。  
          • 静态游标 adOpenStatic— 提供记录集的静态副本,可用来查找数据或生成报告;它始终支持书签,因此允许 Recordset 中的所有移动类型。其他用户所作的添加、更改或删除将不可见。当打开客户端 Recordset 对象时,这是唯一允许的游标类型。
          • 仅向前游标 adOpenForwardOnly— 只允许在 Recordset 中向前滚动。其他用户所作的添加、更改或删除将不可见。当只需要对 Recordset 进行一次传递时,可以提高性能。
                            具体游标值为:
adOpenDynamic 2 使用动态游标。其他用户所作的添加、更改或删除均可见,而且允许 Recordset 中的所有移动类型(如果提供者不支持书签,则书签除外)。
adOpenForwardOnly 0 默认值。使用仅向前游标。除了在记录中只能向前滚动外,与静态游标相同。当只需要在 Recordset 中进行一个传递时,用它可提高性能。
adOpenKeyset 1 使用键集游标。尽管从您的 Recordset 不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,它和动态游标相似。其他用户所作的数据更改依然可见。
adOpenStatic 3 使用静态游标。一组记录的静态副本,可用于查找数据或生成报告。其他用户所作的添加、更改或删除不可见。
adOpenUnspecified -1 不指定游标类型。

                rst.Open(Source, ActiveConnection, CursorType, LockType, Options
                      参数值全部可选。
                      CursorType上面已经说明
                      LockType的可选值:
常量 说明
adLockBatchOptimistic 4 指示开放式批更新。需要批更新模式。
adLockOptimistic 3 指示逐个记录开放式锁定。提供者使用开放式锁定,仅在调用 Update 方法时锁定记录。
adLockPessimistic 2 指示逐个记录保守式锁定。提供者要确保记录编辑成功,通常在编辑之后立即在数据源锁定记录。
adLockReadOnly 1 默认值。指示只读记录。无法改变数据。
adLockUnspecified -1 未指定锁定类型。创建副本时,副本与源对象使用相同的锁定类型。


只有注册用户登录后才能发表评论。


网站导航: