1、幾個(gè)重要的ADO對(duì)象:
首先
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;
(經(jīng)測(cè)試,如果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對(duì)象
cmd=Dispatch(r'ADODB.Command')
cmd對(duì)象的幾個(gè)屬性設(shè)置及可用屬性值:
CommandTyte:
常量 | 值 | 說(shuō)明 |
adCmdUnspecified |
-1 |
不指定命令類型的參數(shù)。 |
adCmdText |
1 |
按命令或存儲(chǔ)過(guò)程調(diào)用的文本定義計(jì)算 CommandText。 |
adCmdTable |
2 |
按表名計(jì)算 CommandText,該表的列全部是由內(nèi)部生成的 SQL 查詢返回的。 |
adCmdStoredProc |
4 |
按存儲(chǔ)過(guò)程名計(jì)算 CommandText。 |
adCmdUnknown |
8 |
默認(rèn)值。指示 CommandText 屬性中命令的類型未知。 |
adCmdFile |
256 |
按持久存儲(chǔ)的 Recordset 的文件名計(jì)算 CommandText。 |
adCmdTableDirect |
512 |
按表名計(jì)算 CommandText,該表的列被全部返回。 |
CommandText:定義命令(例如 SQL 語(yǔ)句)的可執(zhí)行文本
Prepared:用
Prepared 屬性將提供者保存為查詢的已準(zhǔn)備好(或已編譯)版本,該查詢是第一次執(zhí)行 Command對(duì)象前在CommandText屬性中指定的。這可能會(huì)降低命令第一次執(zhí)行的速度,但一旦提供者編譯一個(gè)命令后,便可將命令的編譯版本用于所有后續(xù)的執(zhí)行中,這樣便可提高性能。 如果該屬性為 False,提供者將直接執(zhí)行
Command 對(duì)象而不創(chuàng)建編譯版本。如果提供者不支持命令準(zhǔn)備,則一旦將此屬性設(shè)置為
True,提供者便可能返回錯(cuò)誤。如果它不返回錯(cuò)誤,則僅忽略準(zhǔn)備命令的請(qǐng)求,并將
Prepared 屬性設(shè)置為
False。
CommandTimeout: 屬性設(shè)置提供者等待命令執(zhí)行的秒數(shù)
1.3、Parameter對(duì)象
para1=cmd.CreateParameter(
Name, Type, Direction, Size, Value)
Name 可選。String 值,包含 Parameter 對(duì)象的名稱。
Type 可選。DataTypeEnum 值,指定 Parameter 對(duì)象的數(shù)據(jù)類型。
Direction 可選。ParameterDirectionEnum 值,指定 Parameter 對(duì)象的類型。
Size 可選。Long 值,指定參數(shù)值的最大長(zhǎng)度(以字符或字節(jié)為單位)。
Value 可選。Variant,指定 Parameter 對(duì)象的值。
DataTypeEnum 可用值:
常量 | 值 | 說(shuō)明 |
AdArray
(不適用于 ADOX。) |
0x2000 |
一個(gè)標(biāo)志值,通常與另一個(gè)數(shù)據(jù)類型常量組合,指示該數(shù)據(jù)類型的數(shù)組。 |
adBigInt |
20 |
指示一個(gè)八字節(jié)的有符號(hào)整數(shù) (DBTYPE_I8)。 |
adBinary |
128 |
指示一個(gè)二進(jìn)制值 (DBTYPE_BYTES)。 |
adBoolean |
11 |
指示一個(gè)布爾值 (DBTYPE_BOOL)。 |
adBSTR |
8 |
指示以 Null 終止的字符串 (Unicode) (DBTYPE_BSTR)。 |
adChapter |
136 |
指示一個(gè)四字節(jié)的子集值,標(biāo)識(shí)子行集合中的行 (DBTYPE_HCHAPTER)。 |
adChar |
129 |
指示一個(gè)字符串值 (DBTYPE_STR)。 |
adCurrency |
6 |
指示一個(gè)貨幣值 (DBTYPE_CY)。貨幣是一個(gè)定點(diǎn)數(shù)字,小數(shù)點(diǎn)右側(cè)有四位數(shù)字。該值存儲(chǔ)為八字節(jié)、范圍為 10,000 的有符號(hào)整數(shù)。 |
adDate |
7 |
指示日期值 (DBTYPE_DATE)。日期保存為雙精度數(shù),數(shù)字的整數(shù)部分是從 1899 年 12 月 30 日算起的天數(shù),小數(shù)部分是一天當(dāng)中的片段時(shí)間。 |
adDBDate |
133 |
指示日期值 (yyyymmdd) (DBTYPE_DBDATE)。 |
adDBTime |
134 |
指示時(shí)間值 (hhmmss) (DBTYPE_DBTIME)。 |
adDBTimeStamp |
135 |
指示日期/時(shí)間戳(yyyymmddhhmmss 加十億分之一的小數(shù))(DBTYPE_DBTIMESTAMP)。 |
adDecimal |
14 |
指示具有固定精度和范圍的確切數(shù)字值 (DBTYPE_DECIMAL)。 |
adDouble |
5 |
指示一個(gè)雙精度浮點(diǎn)值 (DBTYPE_R8)。 |
adEmpty |
0 |
指定沒(méi)有值 (DBTYPE_EMPTY)。 |
adError |
10 |
指示一個(gè) 32 位的錯(cuò)誤代碼 (DBTYPE_ERROR)。 |
adFileTime |
64 |
指示一個(gè) 64 位的值,表示從 1601 年 1 月 1 日開(kāi)始的 100 個(gè)十億分之一秒間隔的數(shù)量 (DBTYPE_FILETIME)。 |
adGUID |
72 |
指示全局唯一標(biāo)識(shí)符 (GUID) (DBTYPE_GUID)。 |
adIDispatch |
9 |
指示指向 COM 對(duì)象上 IDispatch 接口的指針 (DBTYPE_IDISPATCH)。
注意 ADO 目前不支持這種數(shù)據(jù)類型。使用它可能導(dǎo)致不可預(yù)料的結(jié)果。
|
adInteger |
3 |
指示一個(gè)四字節(jié)的有符號(hào)整數(shù) (DBTYPE_I4)。 |
adIUnknown |
13 |
指示指向 COM 對(duì)象上 IUnknown 接口的指針 (DBTYPE_IUNKNOWN)。
注意 ADO 目前不支持這種數(shù)據(jù)類型。使用它可能導(dǎo)致不可預(yù)料的結(jié)果。
|
adLongVarBinary |
205 |
指示一個(gè)長(zhǎng)二進(jìn)制值(僅限于 Parameter 對(duì)象)。 |
adLongVarChar |
201 |
指示一個(gè)長(zhǎng)字符串值(僅限于 Parameter 對(duì)象)。 |
adLongVarWChar |
203 |
指示一個(gè)以 Null 終止的長(zhǎng) Unicode 字符串值(僅限于 Parameter 對(duì)象)。 |
adNumeric |
131 |
指示具有固定精度和范圍的確切數(shù)字值 (DBTYPE_NUMERIC)。 |
adPropVariant |
138 |
指示一個(gè) Automation PROPVARIANT (DBTYPE_PROP_VARIANT)。 |
adSingle |
4 |
指示一個(gè)單精度浮點(diǎn)值 (DBTYPE_R4)。 |
adSmallInt |
2 |
指示一個(gè)雙字節(jié)的有符號(hào)整數(shù) (DBTYPE_I2)。 |
adTinyInt |
16 |
指示一個(gè)單字節(jié)的有符號(hào)整數(shù) (DBTYPE_I1)。 |
adUnsignedBigInt |
21 |
指示一個(gè)八字節(jié)的無(wú)符號(hào)整數(shù) (DBTYPE_UI8)。 |
adUnsignedInt |
19 |
指示一個(gè)四字節(jié)的無(wú)符號(hào)整數(shù) (DBTYPE_UI4)。 |
adUnsignedSmallInt |
18 |
指示一個(gè)雙字節(jié)的無(wú)符號(hào)整數(shù) (DBTYPE_UI2)。 |
adUnsignedTinyInt |
17 |
指示一個(gè)單字節(jié)的無(wú)符號(hào)整數(shù) (DBTYPE_UI1)。 |
adUserDefined |
132 |
指示一個(gè)用戶定義的變量 (DBTYPE_UDT)。 |
adVarBinary |
204 |
指示一個(gè)二進(jìn)制值(僅限于 Parameter 對(duì)象)。 |
adVarChar |
200 |
指示一個(gè)字符串值(僅限于 Parameter 對(duì)象)。 |
adVariant |
12 |
指示一個(gè) Automation Variant (DBTYPE_VARIANT)。
注意 ADO 目前不支持這種數(shù)據(jù)類型。使用它可能導(dǎo)致不可預(yù)料的結(jié)果。
|
adVarNumeric |
139 |
指示一個(gè)數(shù)字值(僅限于 Parameter 對(duì)象)。 |
adVarWChar |
202 |
指示一個(gè)以 Null 終止的 Unicode 字符串(僅限于 Parameter 對(duì)象)。 |
adWChar |
130 |
指示一個(gè)以 Null 終止的 Unicode 字符串 (DBTYPE_WSTR)。 |
ParameterDirectionEnum可用值:
常量 | 值 | 說(shuō)明 |
adParamInput |
1 |
默認(rèn)值。指示該參數(shù)是輸入?yún)?shù)。 |
adParamInputOutput |
3 |
指示該參數(shù)既是輸入?yún)?shù),又是輸出參數(shù)。 |
adParamOutput |
2 |
指示該參數(shù)是輸出參數(shù)。 |
adParamReturnValue |
4 |
指示該參數(shù)是返回值。 |
adParamUnknown |
0 |
指示該參數(shù)的方向未知。 |
設(shè)定好后加入到cmd的parameters中:
cmd.Parameters.Append(para1)
設(shè)定para1的值:
para1.Value=***
執(zhí)行cmd:
(rst,result)=cmd.Execute()
1.4、recordset對(duì)象:
rst=Dispatch(r'ADODB.Recordset')
rst對(duì)象在Open前可設(shè)置游標(biāo)類型:
- 動(dòng)態(tài)游標(biāo) adOpenDynamic— 用于查看其他用戶所作的添加、更改和刪除;用于 Recordset(不依賴于書(shū)簽)中的所有移動(dòng)類型;如果提供者支持,還可用于書(shū)簽。
- 鍵集游標(biāo) adOpenKeyset — 其行為類似動(dòng)態(tài)游標(biāo),不同的只是它禁止查看其他用戶添加的記錄,并且禁止訪問(wèn)其他用戶刪除的記錄。其他用戶所作的數(shù)據(jù)更改依然可見(jiàn)。它始終支持書(shū)簽,因此允許 Recordset 中的所有移動(dòng)類型。
- 靜態(tài)游標(biāo) adOpenStatic— 提供記錄集的靜態(tài)副本,可用來(lái)查找數(shù)據(jù)或生成報(bào)告;它始終支持書(shū)簽,因此允許 Recordset 中的所有移動(dòng)類型。其他用戶所作的添加、更改或刪除將不可見(jiàn)。當(dāng)打開(kāi)客戶端 Recordset 對(duì)象時(shí),這是唯一允許的游標(biāo)類型。
- 僅向前游標(biāo) adOpenForwardOnly— 只允許在 Recordset 中向前滾動(dòng)。其他用戶所作的添加、更改或刪除將不可見(jiàn)。當(dāng)只需要對(duì) Recordset 進(jìn)行一次傳遞時(shí),可以提高性能。
具體游標(biāo)值為:
adOpenDynamic
|
2 |
使用動(dòng)態(tài)游標(biāo)。其他用戶所作的添加、更改或刪除均可見(jiàn),而且允許 Recordset
中的所有移動(dòng)類型(如果提供者不支持書(shū)簽,則書(shū)簽除外)。 |
adOpenForwardOnly
|
0 |
默認(rèn)值。使用僅向前游標(biāo)。除了在記錄中只能向前滾動(dòng)外,與靜態(tài)游標(biāo)相同。當(dāng)只需要在 Recordset
中進(jìn)行一個(gè)傳遞時(shí),用它可提高性能。 |
adOpenKeyset
|
1 |
使用鍵集游標(biāo)。盡管從您的 Recordset
不能訪問(wèn)其他用戶刪除的記錄,但除無(wú)法查看其他用戶添加的記錄外,它和動(dòng)態(tài)游標(biāo)相似。其他用戶所作的數(shù)據(jù)更改依然可見(jiàn)。 |
adOpenStatic
|
3 |
使用靜態(tài)游標(biāo)。一組記錄的靜態(tài)副本,可用于查找數(shù)據(jù)或生成報(bào)告。其他用戶所作的添加、更改或刪除不可見(jiàn)。 |
adOpenUnspecified
|
-1 |
不指定游標(biāo)類型。 |
rst.Open(
Source,
ActiveConnection, CursorType,
LockType, Options)
參數(shù)值全部可選。
CursorType上面已經(jīng)說(shuō)明
LockType的可選值:
常量 |
值 |
說(shuō)明 |
adLockBatchOptimistic
|
4 |
指示開(kāi)放式批更新。需要批更新模式。 |
adLockOptimistic
|
3 |
指示逐個(gè)記錄開(kāi)放式鎖定。提供者使用開(kāi)放式鎖定,僅在調(diào)用 Update 方法時(shí)鎖定記錄。 |
adLockPessimistic
|
2 |
指示逐個(gè)記錄保守式鎖定。提供者要確保記錄編輯成功,通常在編輯之后立即在數(shù)據(jù)源鎖定記錄。 |
adLockReadOnly
|
1 |
默認(rèn)值。指示只讀記錄。無(wú)法改變數(shù)據(jù)。 |
adLockUnspecified
|
-1 |
未指定鎖定類型。創(chuàng)建副本時(shí),副本與源對(duì)象使用相同的鎖定類型。 |