python pymssql
阿新 • • 發佈:2018-12-12
譯者注:譯者部落格(http://blog.csdn.net/lin_strong),轉載請保留這條。此為_mssql模組version2.1.4官方文件的翻譯,僅供學習交流使用,請勿用於商業用途。
模組級符號
- _mssql.version
- 見 pymssql.version.
- _mssql.VERSION
- 見 pymssql.VERSION.
這是版本 2.2.0. 中新加的特性。 - _mssql.full_version
- 見 pymssql.full_version.
你可以修改其值以改變全域性行為的變數:
- _mssql.login_timeout
- 用秒錶示的連線和登入超時時間,預設60秒。
- _mssql.min_error_severity
- 丟擲異常的最小錯誤等級。預設值6在大部分情況下應該是合適的。
函式
- _mssql.set_max_connections(number)
- 設定同一時刻處於開啟狀態的連結的最大數量。預設25。
- _mssql.get_max_connections()
- 獲取同一時刻處於開啟狀態的連結的最大數量。
MSSQLConnection 類
- class _mssql.MSSQLConnection
- 這個類代表一個MS SQL資料庫連結。你可以通過資料庫連結發出queries並獲取結果。
你可以通過呼叫_mssql.connect()來建立這個類的一個例項。它接收以下引數。注意,除了位置定位的引數外,你還可以使用關鍵字引數。
引數名(型別) | 說明 |
---|---|
server (str) | 你想要連線的資料庫伺服器和實體。如: r’.\SQLEXPRESS’ –本地機器上的SQLEXPRESS實體(僅Windows) r’(local)\SQLEXPRESS’ – 同上(僅Windows) ‘SQLHOST’ – 預設埠上的預設實體(僅Windows) ‘SQLHOST’ – 在freetds.conf中設定的指定埠上的指定實體 (僅Linux/*nix) ‘SQLHOST,1433’ – 指定主機上的指定TCP埠 ’SQLHOST:1433’ – 同上 ’SQLHOST,5000’ – 如果你已經設定了一個實體在埠5000進行監聽 ’SQLHOST:5000’ – 同上 |
user (str) | 用於連線的資料庫使用者 |
password (str) | 使用者的密碼 |
charset (str) | 連線到資料庫所使用的字符集名字 |
database (str) | 連結初始化的資料庫。預設情況下,SQL伺服器會選擇設定中特定使用者所對應的預設資料庫。 |
appname (str) | 設定連結使用的應用名 |
port (str) | 連線到伺服器所使用的TCP埠號 |
tds_version (str) | 使用的TDS協議版本,預設為None |
conn_properties | 當連結建立時傳送給伺服器的SQL queries。可以是一個字串或者另一類可迭代的字串組。預設值:見下面 |
SET ARITHABORT ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET ANSI_NULLS ON;
SET ANSI_NULL_DFLT_ON ON;
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
SET ANSI_NULL_DFLT_ON ON;
SET CURSOR_CLOSE_ON_COMMIT ON;
SET QUOTED_IDENTIFIER ON;
SET TEXTSIZE 2147483647; -- http://msdn.microsoft.com/en-us/library/aa259190%28v=sql.80%29.aspx
版本2.1.1中新特性:conn_properties引數。
版本2.1.1的變化:在2.1.1之前,現在由conn_properties指定的初始化請求不是可定製的,其值硬編碼為以上文字。
版本2.1.1中新特性: 能連線Azure。
版本2.2.0的變化: 引數tds_version的預設值變為了None。在版本2.0.0與版本2.1.2之間,其預設值為’7.1’。
- 警告:
- 引數tds_version的預設值為None。這意味著:
1 .你不能依賴於舊的預設值’7.1’。
2 .你得做以下其中一件事:
· 通過傳遞值給這個引數直接指定它的值,或者
· 使用FreeTDS提供的方法配置它
可能這看起來很麻煩,但同時意味著你可以使用pymssql/_mssql完整地配置連結的特性,而不用再管freetds.conf了。從版本2.0.0到版本2.1.2,已經可以設定連線到伺服器時請求的TDS協議版本了,但如果沒有指定的話,則使用版本7.1。 - 警告:
- FreeTDS在版本0.95中添加了對TDS協議版本7.3的支援。如果你知道由pymssql使用的底層FreeTDS的版本是0.91的話,要小心不要要求TDS7.3,因為這即不會引發任何錯誤也沒有機制阻止你傳遞這個無效值。
- 警告:
- FreeTDS在版本0.95中添加了對TDS協議版本7.3的支援。如果你知道由pymssql使用的底層FreeTDS的版本更舊的話,要小心不要要求TDS7.3,因為這即不會引發任何錯誤也沒有機制阻止你傳遞這個無效值。
屬性
- MSSQLConnection.connected
- 如果connection物件擁有一個已經開啟的資料庫連結則為True,否則為False。
- MSSQLConnection.charset
- 傳遞給_mssql.connect()的字符集名。
- MSSQLConnection.identity
- 返回上一個插入的行的標識值。如果之前的操作沒涉及向帶有標識列的表中插入行,則返回None。用例 - 假設persons表包含一個標識列加上一個name列:
conn.execute_non_query("INSERT INTO persons (name) VALUES('John Doe')")
print "Last inserted row has id = " + conn.identity
- MSSQLConnection.query_timeout
- 用秒錶示的query超時時間,預設為0,0的意思是無限等待。由於DB庫的工作方式,設定這個屬性會影響所有從當前Python指令碼開啟的連結(或從技術上說,所有從這個dbinit()例項建立的連結) 。
- MSSQLConnection.rows_affected
- 上一個query所影響的行數。對於SELECT語句,只有在讀了所有行後這個值才有意義。
- MSSQLConnection.debug_queries
- 如果設為true,所有query都會在格式化並完成引數引用後列印到stderr,然後才傳送給SQL伺服器。如果你懷疑格式化或引數引用上出了問題的話,這應該會有幫助。
- MSSQLConnection.tds_version
- 這個連結使用的TDS版本。可能為4.2、5.0、7.0、 7.1、7.2、7.3,或者如果沒有探測到任何TDS版本的話為None。
版本2.1.4的變化:為了正確性和一致性,在pymssql2.1.4中,用於指示TDS 7.1的值從8.0改為了7.1。
版本2.1.3的變化:加入了7.3這個選項。 - MSSQLConnection.tds_version_tuple
- 這是版本 2.2.0. 中新加的特性。
元組形式的這條連結使用的TDS 版本,這樣在程式中更容易處理(轉換、比較)。可能為(4, 2)、 (5, 0)、 (7, 0)、 (7, 1)、 (7, 2)、 (7, 3) 或者如果沒有探測到任何TDS版本的話為None。
版本2.1.3的變化:加入了7.3這個選項。
方法
- MSSQLConnection.cancel()
- 取消所有從上個SQL操作以來掛起的結果。可以在同一行上多次呼叫。這種情況下不會丟擲異常。
- MSSQLConnection.close()
- 關閉連結並釋放所有記憶體。可以在同一行上多次呼叫。這種情況下不會丟擲異常。
- MSSQLConnection.execute_query(query_string)
MSSQLConnection.execute_query(query_string, params) - 這個方法傳送一條query給這個物件例項所連線的MS SQL資料庫。當失敗時會丟擲一條異常。如果在執行這個命令之前有掛起的結果或者行,它們會被默默地丟掉。
在呼叫這個方法之後,你可以迭代這個連結物件來獲取query返回的行。
你可以使用Python格式化,所有值都會被合理地引用。
這個方法應該用於會返回結果的query,即SELECT。 - MSSQLConnection.execute_non_query(query_string)
MSSQLConnection.execute_non_query(query_string, params) - 這個方法傳送一條query給這個物件例項所連線的MS SQL資料庫。它的結果(如果有)會被拋棄。當失敗時會丟擲一條異常。如果在執行這個命令之前有掛起的結果或者行,它們會被默默地丟掉。
你可以使用Python格式化,所有值都會被合理地引用。
這個方法很適合INSERT、 UPDATE、 DELETE和資料定義語言(Data Definition Language),即當你想改變你的資料庫的schema時。 - MSSQLConnection.execute_scalar(query_string)
MSSQLConnection.execute_scalar(query_string, params) - 這個方法傳送一條query給這個物件例項所連線的MS SQL資料庫,然後返回結果的首行首列。當失敗時會丟擲一條異常。如果在執行這個命令之前有掛起的結果或者行,它們會被默默地丟掉。
你可以使用Python格式化,所有值都會被合理地引用。
如果你的query只返回一個值的話,這個方法就很有用了,如下例所示。這個方法的工作方式相當於iter(conn).next()[0]。如果還有剩下的行的話,你還是可以在呼叫這條命令後進行迭代。
count = conn.execute_scalar("SELECT COUNT(*) FROM employees")
- MSSQLConnection.execute_row(query_string)
MSSQLConnection.execute_row(query_string, params) - 這個方法傳送一條query給這個物件例項所連線的MS SQL資料庫,然後返回結果的首行。當失敗時會丟擲一條異常。如果在執行這個命令之前有掛起的結果或者行,它們會被默默地丟掉。
你可以使用Python格式化,所有值都會被合理地引用。
如果你的query只返回一行並且不想或不需要迭代連結物件的話,這個方法就很有用了。這個方法的工作方式相當於iter(conn).next()。如果還有剩下的行的話,你還是可以在呼叫這條命令後進行迭代。
empinfo = conn.execute_row("SELECT * FROM employees WHERE empid=10")
- MSSQLConnection.get_header()
- 這個方法是一個基礎函式,不需要由你的程式碼呼叫。它獲取遵從Python DB-API的頭資訊。返回一個描述當前結果頭的一個有7個元素的元組。只填充了名字和遵從的DB-API型別,剩下的都是None,這是規範許可的。
- MSSQLConnection.init_procedure(name)
- 建立一個MSSQLStoredProcedure物件,用於呼叫名字由name指定的儲存過程。
- MSSQLConnection.nextresult()
- 移到下一個結果集,跳過所有掛起的結果。這個方法獲取並拋棄當前操作剩下的所有行,然後移到下一個結果(如果有的話)。如果有下一個結果集,則返回True,否則返回None。當失敗時會丟擲一條異常。
- MSSQLConnection.select_db(dbname)
- 這個函式把指定資料庫變為當前資料庫。當失敗時會丟擲一條異常。
- MSSQLConnection.iter()
MSSQLConnection.next() - 這是版本 2.1.0. 中新加的特性。
這兩方法實現了Python迭代器協議。很可能你不會直接,而是間接使用迭代器呼叫它。 - MSSQLConnection.set_msghandler(handler)
- 這是版本 2.1.1. 中新加的特性。
這個方法為連結設定一個訊息handler函式,這樣客戶端就可以訪問從伺服器返回的資訊了。
傳遞給這個方法的訊息handler函式的簽名應該是這樣的:
def my_msg_handler(msgstate, severity, srvname, procname, line, msgtext):
# The body of the message handler.
msgstate、severity和line是整型值;srvname、procname和msgtext是字串.
MSSQLStoredProcedure 類
- class _mssql.MSSQLStoredProcedure
- 這個類代表一個儲存過程。你可以通過呼叫MSSQLConnection物件上的init_procedure()方法來建立這個類的一個例項。
屬性
- MSSQLStoredProcedure.connection
- 底層的MSSQLConnection物件。
- 這個物件代表的儲存過程的名字。
- MSSQLStoredProcedure.parameters
- 繫結到這個儲存過程的引數們。
方法
- MSSQLStoredProcedure.bind(value, dbtype, name=None, output=False, null=False, max_length=-1)
- 這個方法繫結一個引數到儲存過程。value和dbtype是強制的,剩下的都是可選的。
引數名 | 說明 |
---|---|
value | 儲存在引數中的值 |
dbtype | 以下之一: SQLBINARY、SQLBIT、SQLBITN、SQLCHAR、SQLDATETIME、SQLDATETIM4、SQLDATETIMN、SQLDECIMAL、SQLFLT4、SQLFLT8、SQLFLTN、SQLIMAGE、SQLINT1、SQLINT2、SQLINT4、SQLINT8、SQLINTN、SQLMONEY、SQLMONEY4、SQLMONEYN、SQLNUMERIC、SQLREAL、SQLTEXT、SQLVARBINARY、SQLVARCHAR、SQLUUID |
name | 引數的名字。需要為"@name"這樣的形式。 |
output | 引數的方向。True表示是一個輸出引數,即在儲存過程執行後它返回一個值(在SQL DDL中是通過一個"output"字尾來宣告它們的,如"@aname varchar(10) output") |
null | Boolean型別。表明這個輸入引數的值是NULL |
max_length | 從儲存過程返回的這個引數的最大資料長度 |
- MSSQLStoredProcedure.execute()
- 執行這個儲存過程。
模組級異常
異常繼承樹:
MSSQLException
|
+-- MSSQLDriverException
|
+-- MSSQLDatabaseException
- exception _mssql.MSSQLDriverException
- 只要_mssql內部發生了問題,就會丟擲MSSQLDriverException – 如資料結構的記憶體不足等。
- exception _mssql.MSSQLDatabaseException
- 只要資料庫發生了問題,就會丟擲MSSQLDatabaseException – 如query語法錯誤、無效物件名等。這種情況下,你可以使用以下屬性來獲得錯誤細節:
number:錯誤碼,是由SQL伺服器返回的。
severity:嚴重級別,是由SQL伺服器返回的。如果這個屬性的值低於_mssql.min_error_severity的值,這個錯誤會被忽略,不會丟擲異常。
state:第三個錯誤碼,是由SQL伺服器返回的。
message:錯誤資訊,是由SQL伺服器返回的。