译者注:译者博客(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;
版本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):
msgstate、severity和line是整型值;srvname、procname和msgtext是字符串.
MSSQLStoredProcedure 类
-
class _mssql.MSSQLStoredProcedure
-
这个类代表一个存储过程。你可以通过调用MSSQLConnection对象上的init_procedure()方法来创建这个类的一个实例。
属性
-
MSSQLStoredProcedure.connection
-
底层的MSSQLConnection对象。
-
MSSQLStoredProcedure.name
-
这个对象代表的存储过程的名字。
-
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服务器返回的。