Posted on 2008-02-28 21:45
pts 閱讀(2034)
評論(0) 編輯 收藏 所屬分類:
DataBase 、
Python
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 |
未指定鎖定類型。創建副本時,副本與源對象使用相同的鎖定類型。 |