<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Python_-_MS_SQL_Server_Modules</id>
	<title>Python - MS SQL Server Modules - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Python_-_MS_SQL_Server_Modules"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_MS_SQL_Server_Modules&amp;action=history"/>
	<updated>2026-05-18T11:33:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Python_-_MS_SQL_Server_Modules&amp;diff=308&amp;oldid=prev</id>
		<title>PeterHarding: New page:  = Python MS SQL Server Interface Modules =  * [http://wiki.python.org/moin/SQL_Server Accessing SQL Server - PythonInfo Wiki] * [http://www.object-craft.com.au/projects/mssql/ MS SQL Serv...</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Python_-_MS_SQL_Server_Modules&amp;diff=308&amp;oldid=prev"/>
		<updated>2007-11-09T03:48:51Z</updated>

		<summary type="html">&lt;p&gt;New page:  = Python MS SQL Server Interface Modules =  * [http://wiki.python.org/moin/SQL_Server Accessing SQL Server - PythonInfo Wiki] * [http://www.object-craft.com.au/projects/mssql/ MS SQL Serv...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
= Python MS SQL Server Interface Modules =&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.python.org/moin/SQL_Server Accessing SQL Server - PythonInfo Wiki]&lt;br /&gt;
* [http://www.object-craft.com.au/projects/mssql/ MS SQL Server Module by Object Craft]&lt;br /&gt;
* [http://pymssql.sourceforge.net/ PyMSSQL @ SourceForge]&lt;br /&gt;
* [http://www.egenix.com/products/python/mxODBC/ mxODBC]&lt;br /&gt;
* [http://py.vaults.ca/apyllo.py/973100124 Vaults of Parnassus Database Links]&lt;br /&gt;
* [http://www.ironpython.info/index.php/Contents IronPython]&lt;br /&gt;
* [http://sqlrelay.sourceforge.net/sqlrelay/programming/pythondb.html SQL Relay]&lt;br /&gt;
&lt;br /&gt;
= Other Resources =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Misc Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://webscripts.softpedia.com/script/Database-Tools/Python-Database-Interface-for-MS-SQL-Server-18442.html]&lt;br /&gt;
* [http://www.wiggy.net/code/python-dhm/doc/public/dhm.sqlwrap-module.html]&lt;br /&gt;
* [http://www.wiggy.net/code/python-dhm/doc/public/dhm-module.html]&lt;br /&gt;
&lt;br /&gt;
== Using mxODBC ==&lt;br /&gt;
&lt;br /&gt;
How about trying mxODBC ([http://starship.python.net/crew/lemburg/mxODBC.html]).&lt;br /&gt;
I found that it&amp;#039;s quite easy to install and works great. Besides, the Win32&lt;br /&gt;
ODBC module, according to the Python Website, is not currently being maintained by anyone.&lt;br /&gt;
&lt;br /&gt;
Using mxODBC, I found that the following line will create a connection to a database within a CGI script:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Open connect to Database via ODBC&lt;br /&gt;
 db = Odbc.Windows.DriverConnect(&amp;#039;DRIVER={Microsoft ODBC for&lt;br /&gt;
Oracle};SERVER=Test;UID=userid;PWD=password;&amp;#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously, I&amp;#039;m using the ODBC driver for Oracle, so replace this driver with SQL Server.&lt;br /&gt;
&lt;br /&gt;
Good Luck,&lt;br /&gt;
Paul&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Navtej Riyait&amp;quot; &amp;lt;Navtej.Riyait at ukgateway.net&amp;gt; wrote in message&lt;br /&gt;
news:86ioek$iek$1 at lure.pipex.net...&lt;br /&gt;
&amp;gt; Hello,&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; I am trying to create a little test web application in python/HTML using&lt;br /&gt;
&amp;gt; IIS. I have setup IIS so that .cgi scripts are sent to the python&lt;br /&gt;
&amp;gt; interpreter. I am trying to access a SQL Server database, &amp;#039;pubs&amp;#039; (using&lt;br /&gt;
&amp;gt; Python DB APIs). I am importing odbc, dbi in my script. Database access&lt;br /&gt;
&amp;gt; works fine when I run a dbtest script at the command line, but the same bit&lt;br /&gt;
&amp;gt; of code gives an error when run in the .cgi script. It is not finding the&lt;br /&gt;
&amp;gt; data source name (DSN). I have set up the DSN in the ODBC Driver Manager&lt;br /&gt;
&amp;gt; correctly.&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; I can&amp;#039;t see what environment parameters to set to get the .cgi python script&lt;br /&gt;
&amp;gt; to access the &amp;#039;pubs&amp;#039; database. Can anyone help ?&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; Thanks&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Some Examples =&lt;br /&gt;
&lt;br /&gt;
\\&lt;br /&gt;
&lt;br /&gt;
== Example 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
import pymssql&lt;br /&gt;
&lt;br /&gt;
con = pymssql.connect(host=&amp;#039;192.168.13.122&amp;#039;,user=&amp;#039;sa&amp;#039;,password=&amp;#039;&amp;#039;,database=&amp;#039;tempdb&amp;#039;)&lt;br /&gt;
cur = con.cursor()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
query=&amp;quot;create table pymssql (no int, fno float, comment varchar(50));&amp;quot;&lt;br /&gt;
cur.execute(query)&lt;br /&gt;
print &amp;quot;create table: %d&amp;quot; % cur.rowcount&lt;br /&gt;
&lt;br /&gt;
for x in range(10):&lt;br /&gt;
    query=&amp;quot;insert into pymssql (no,fno,comment) values (%d,%d.%d,&amp;#039;%dth comment&amp;#039;);&amp;quot; % (x+1,x+1,x+1,x+1)&lt;br /&gt;
    ret=cur.execute(query)&lt;br /&gt;
    print &amp;quot;insert table: %d&amp;quot; % cur.rowcount&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for x in range(10):&lt;br /&gt;
    query=&amp;quot;update pymssql set comment=&amp;#039;%dth hahaha.&amp;#039; where no = %d&amp;quot; % (x+1,x+1)&lt;br /&gt;
    ret=cur.execute(query)&lt;br /&gt;
    print &amp;quot;update table: %d&amp;quot; % cur.rowcount&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
query=&amp;quot;EXEC sp_tables; select * from pymssql;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for x in range(10):&lt;br /&gt;
    cur.execute(query)&lt;br /&gt;
&lt;br /&gt;
    while 1:&lt;br /&gt;
	print cur.fetchall()&lt;br /&gt;
	if 0 == cur.nextset():&lt;br /&gt;
	    break&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
query=&amp;quot;drop table pymssql;&amp;quot;&lt;br /&gt;
cur.execute(query)&lt;br /&gt;
print &amp;quot;drop table: %d&amp;quot; % cur.rowcount&lt;br /&gt;
&lt;br /&gt;
con.commit()&lt;br /&gt;
con.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import _mssql&lt;br /&gt;
&lt;br /&gt;
mssql=_mssql.connect(&amp;#039;192.168.13.122&amp;#039;,&amp;#039;sa&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
mssql.select_db(&amp;#039;tempdb&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# create db&lt;br /&gt;
&lt;br /&gt;
query=&amp;quot;create table pymssql (no int, comment varchar(50));&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ret = mssql.query(query)&lt;br /&gt;
if ret:&lt;br /&gt;
print &amp;quot;create table: %d&amp;quot; % ret&lt;br /&gt;
print mssql.fetch_array()&lt;br /&gt;
else:&lt;br /&gt;
print mssql.errmsg()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# insert&lt;br /&gt;
&lt;br /&gt;
for x in range(10):&lt;br /&gt;
query=&amp;quot;insert into pymssql (no,comment) values (%d,&amp;#039;%dth comment&amp;#039;);&amp;quot; % (x+1,x+1)&lt;br /&gt;
ret=mssql.query(query)&lt;br /&gt;
if ret:&lt;br /&gt;
print &amp;quot;insert table: %d&amp;quot; % ret&lt;br /&gt;
print mssql.fetch_array()&lt;br /&gt;
&lt;br /&gt;
else:&lt;br /&gt;
print mssql.errmsg()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# update&lt;br /&gt;
&lt;br /&gt;
for x in range(10):&lt;br /&gt;
query=&amp;quot;update pymssql set comment=&amp;#039;%dth hahaha.&amp;#039; where no = %d&amp;quot; % (x+1,x+1)&lt;br /&gt;
ret=mssql.query(query)&lt;br /&gt;
&lt;br /&gt;
if ret:&lt;br /&gt;
print &amp;quot;update table: %d&amp;quot; % ret&lt;br /&gt;
print mssql.fetch_array()&lt;br /&gt;
else:&lt;br /&gt;
print mssql.errmsg()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# multiple query and multiple result&lt;br /&gt;
&lt;br /&gt;
query=&amp;quot;EXEC sp_tables; select * from pymssql;&amp;quot;&lt;br /&gt;
for x in range(10):&lt;br /&gt;
if mssql.query(query):&lt;br /&gt;
header=mssql.fetch_array()&lt;br /&gt;
for y in header:&lt;br /&gt;
print y&lt;br /&gt;
#print x,header[0][0][0],len(header[0][1][0])&lt;br /&gt;
&lt;br /&gt;
else:&lt;br /&gt;
print mssql.errmsg()&lt;br /&gt;
print mssql.stdmsg()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# drop table&lt;br /&gt;
&lt;br /&gt;
query=&amp;quot;drop table pymssql;&amp;quot;&lt;br /&gt;
ret = mssql.query(query)&lt;br /&gt;
if ret:&lt;br /&gt;
print &amp;quot;drop table: %d&amp;quot; % ret&lt;br /&gt;
print mssql.fetch_array()&lt;br /&gt;
&lt;br /&gt;
else:&lt;br /&gt;
print mssql.errmsg()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mssql.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other Stuff =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MS SQL Server DBI Implementation ==&lt;br /&gt;
&lt;br /&gt;
This DBI implements the Cursor and Connection objects. It is functional: you can create connections, cursors, do fetchone, fetchall, get rowcount, etc. It uses osql or SQL2005&amp;#039;s sqlcmd instead of ODBC or ADO. There is a good sized section with examples to get you started. The SQL2005 support is new, showing improved execution speed for SQL2005&amp;#039;s sqlcmd.exe, even when accessing SQL2000 databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#dblib.py&lt;br /&gt;
#created by Jorge Besada&lt;br /&gt;
&lt;br /&gt;
import os,sys&lt;br /&gt;
&lt;br /&gt;
class Connection:&lt;br /&gt;
    def __init__(self,sname,uname=&amp;#039;&amp;#039;,password=&amp;#039;&amp;#039;,db=&amp;#039;&amp;#039;, version=&amp;#039;&amp;#039;):&lt;br /&gt;
        self.version = version&lt;br /&gt;
        self.servername = sname&lt;br /&gt;
        self.username = uname&lt;br /&gt;
        self.password = password&lt;br /&gt;
        self.defdb = db&lt;br /&gt;
        self.constr = &amp;#039;&amp;#039;&lt;br /&gt;
        if db == &amp;#039;&amp;#039;:&lt;br /&gt;
            self.defdb = &amp;#039;master&amp;#039;&lt;br /&gt;
        self.connected = 0&lt;br /&gt;
        if self.version == None or self.version == &amp;quot;&amp;quot;:&lt;br /&gt;
            print &amp;quot;Need to pass sql version argument&amp;quot;&lt;br /&gt;
            return self&lt;br /&gt;
        if self.version == &amp;quot;sql2000&amp;quot; or self.version == &amp;quot;sql7&amp;quot;:&lt;br /&gt;
            execsql = &amp;quot;osql&amp;quot;&lt;br /&gt;
        if self.version == &amp;quot;sql2005&amp;quot;:&lt;br /&gt;
            execsql = &amp;quot;sqlcmd&amp;quot;&lt;br /&gt;
        if self.version == &amp;quot;sybase&amp;quot;:&lt;br /&gt;
            execsql = &amp;quot;isql&amp;quot;&lt;br /&gt;
            print &amp;quot;Sorry, Sybase has not been implemented yet!&amp;quot;&lt;br /&gt;
            return self&lt;br /&gt;
        if uname == &amp;#039;&amp;#039;:&lt;br /&gt;
            self.constr = execsql + &amp;quot; -E -S&amp;quot; + self.servername + &amp;quot; -d&amp;quot; + self.defdb + &amp;quot; /w 8192 &amp;quot;&lt;br /&gt;
        else:&lt;br /&gt;
            self.constr = execsql + &amp;quot; -U&amp;quot; + self.username + &amp;quot; -P&amp;quot; + self.password + &amp;quot; -S&amp;quot; + self.servername + &amp;quot; -d&amp;quot; + self.defdb + &amp;quot; /w 8192 &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        #test connection:&lt;br /&gt;
        s = &amp;quot;set nocount on select name from master..syslogins where name = &amp;#039;sa&amp;#039;&amp;quot;&lt;br /&gt;
        lst = os.popen(self.constr + &amp;#039; -Q&amp;#039; + &amp;#039;&amp;quot;&amp;#039; + s + &amp;#039;&amp;quot;&amp;#039;).readlines()&lt;br /&gt;
&lt;br /&gt;
        try:&lt;br /&gt;
            if lst[2].strip() == &amp;#039;sa&amp;#039;:&lt;br /&gt;
                self.connected = 1&lt;br /&gt;
            else:&lt;br /&gt;
                self.connected = 0&lt;br /&gt;
            c = Cursor()&lt;br /&gt;
            c.servername = sname&lt;br /&gt;
            c.username = uname&lt;br /&gt;
            c.password = password&lt;br /&gt;
            c.defdb = db&lt;br /&gt;
            c.constr = self.constr&lt;br /&gt;
            self.cursor = c&lt;br /&gt;
        except IndexError:&lt;br /&gt;
            print &amp;quot;Could not connect&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def commit(self):&lt;br /&gt;
        &amp;quot;this is here for compatibility&amp;quot;&lt;br /&gt;
        pass&lt;br /&gt;
&lt;br /&gt;
    def close(self):&lt;br /&gt;
        self = None&lt;br /&gt;
        return self&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Cursor:&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.defdb = &amp;#039;&amp;#039;&lt;br /&gt;
        self.servername = &amp;#039;&amp;#039;&lt;br /&gt;
        self.username = &amp;#039;&amp;#039;&lt;br /&gt;
        self.password = &amp;#039;&amp;#039;&lt;br /&gt;
        self.constr = &amp;#039;&amp;#039;&lt;br /&gt;
        self.rowcount = -1&lt;br /&gt;
        self.records = []&lt;br /&gt;
        self.rowid = 0&lt;br /&gt;
        self.sqlfile = &amp;quot;-Q&amp;quot;&lt;br /&gt;
        self.colseparator = chr(1) #default column separator&lt;br /&gt;
        #this is going to be a list of lists, each one with:&lt;br /&gt;
        #name, type_code, display_size, internal_size, precision, scale, null_ok&lt;br /&gt;
        self.description = []&lt;br /&gt;
        self.fieldnames = []&lt;br /&gt;
        self.fieldvalues = []&lt;br /&gt;
        self.fieldvalue = []&lt;br /&gt;
        #one dictionary by column&lt;br /&gt;
        self.dictfield = {&amp;#039;name&amp;#039;:&amp;#039;&amp;#039;, &amp;#039;type_code&amp;#039;:0,&amp;#039;display_size&amp;#039;:0,&amp;#039;internal_size&amp;#039;:0,&amp;#039;precision&amp;#039;:0, &amp;#039;scale&amp;#039;:0, &amp;#039;null_ok&amp;#039;:0}&lt;br /&gt;
        #list of lists&lt;br /&gt;
        self.dictfields = []&lt;br /&gt;
&lt;br /&gt;
    #this is for compatibility to allow both types of calls:&lt;br /&gt;
    #cursor = connection.cursor() or using cursor = connection.cursor&lt;br /&gt;
    def __call__(self):&lt;br /&gt;
        c = Cursor()&lt;br /&gt;
        return c&lt;br /&gt;
&lt;br /&gt;
    def execute(self, s):&lt;br /&gt;
        self.records = []&lt;br /&gt;
        lst = os.popen(self.constr + &amp;#039; -s&amp;#039; + self.colseparator + &amp;quot; &amp;quot; + self.sqlfile + &amp;#039;&amp;quot;&amp;#039; + s + &amp;#039;&amp;quot;&amp;#039;).readlines()&lt;br /&gt;
        if len(lst) == 0:&lt;br /&gt;
            return self.rowcount&lt;br /&gt;
&lt;br /&gt;
        #If we get here we have results&lt;br /&gt;
        #rowcount maybe in last line, in this form: (4 rows affected)&lt;br /&gt;
        tmplastline = lst[-1]&lt;br /&gt;
        if tmplastline[0] == &amp;quot;(&amp;quot;:  #there is a rowcount&lt;br /&gt;
            lastline = lst[-1]&lt;br /&gt;
            spacepos = lastline.index(&amp;quot; &amp;quot;)&lt;br /&gt;
            count = lastline[1:spacepos]&lt;br /&gt;
            self.rowcount = int(count)&lt;br /&gt;
        else:&lt;br /&gt;
            #last line has no recordcount, so reset it to 0&lt;br /&gt;
            self.records = lst[:]&lt;br /&gt;
            self.rowcount = 0&lt;br /&gt;
            return self.rowcount&lt;br /&gt;
&lt;br /&gt;
        #if we got here we may have a rowcount and the list with results&lt;br /&gt;
        i = 0&lt;br /&gt;
        #process metadata if we have it:&lt;br /&gt;
        firstline = lst[0]&lt;br /&gt;
        lst1 = lst[0].split(self.colseparator)&lt;br /&gt;
        self.fieldnames = []&lt;br /&gt;
        for x in lst1:&lt;br /&gt;
            x1 = x.strip()&lt;br /&gt;
            self.fieldnames.append(x1)  #add column name&lt;br /&gt;
        #need to make a list for each column name&lt;br /&gt;
        self.description = []&lt;br /&gt;
        for x in self.fieldnames:&lt;br /&gt;
            l = []&lt;br /&gt;
            l.append(x)&lt;br /&gt;
            for m in range(len(self.dictfield) - 1):&lt;br /&gt;
                l.append(0)&lt;br /&gt;
            l2 = tuple(l)&lt;br /&gt;
            self.description.append(l2)&lt;br /&gt;
        self.description = tuple(self.description)&lt;br /&gt;
&lt;br /&gt;
        #Data section: lst[0] is row with column names,skip&lt;br /&gt;
        #If the resulting string starts and ends with &amp;#039;-&amp;#039;, discard&lt;br /&gt;
&lt;br /&gt;
        for x in lst[1:-1]:&lt;br /&gt;
            x0 = &amp;#039;&amp;#039;.join(x)&lt;br /&gt;
            x1 = x0.strip()&lt;br /&gt;
            if x1 &amp;gt; &amp;#039;&amp;#039; and x1[0] &amp;gt; &amp;#039;-&amp;#039; and x1[-1] &amp;gt; &amp;#039;-&amp;#039;:&lt;br /&gt;
                self.records.append(x1)&lt;br /&gt;
        #reset for each execution&lt;br /&gt;
        self.rowid = 0&lt;br /&gt;
        return self.rowcount&lt;br /&gt;
&lt;br /&gt;
    #returns one row of the result set, keeps track of the position&lt;br /&gt;
    def fetchone(self):&lt;br /&gt;
        i = self.rowid&lt;br /&gt;
        j = i + 1&lt;br /&gt;
        self.rowid = j&lt;br /&gt;
        try:&lt;br /&gt;
            return tuple(self.records[i].split(self.colseparator))&lt;br /&gt;
        except IndexError:&lt;br /&gt;
            pass&lt;br /&gt;
&lt;br /&gt;
    #returns whole recordset&lt;br /&gt;
    def fetchall(self):&lt;br /&gt;
        lst = []&lt;br /&gt;
        try:&lt;br /&gt;
            for x in range(self.rowid, self.rowcount):&lt;br /&gt;
                x1 = tuple(self.records[x].split(self.colseparator))&lt;br /&gt;
                lst.append(x1)&lt;br /&gt;
        except IndexError:&lt;br /&gt;
            pass&lt;br /&gt;
        return lst&lt;br /&gt;
&lt;br /&gt;
    def close(self):&lt;br /&gt;
        self.records = None&lt;br /&gt;
        self = None&lt;br /&gt;
        return self&lt;br /&gt;
&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
&lt;br /&gt;
#Testing harness: we create and drop logins and databases&lt;br /&gt;
#Edit connection for desired server name and security options:&lt;br /&gt;
#For local server, integrated security&lt;br /&gt;
#   c = Connection(&amp;#039;(local)&amp;#039;,db=&amp;#039;pubs&amp;#039;, version=&amp;#039;sql2000&amp;#039;)&lt;br /&gt;
#For local server, SQL security&lt;br /&gt;
#   c = Connection(&amp;#039;(local)&amp;#039;,&amp;#039;sa&amp;#039;,&amp;#039;sa password&amp;#039;,db=&amp;#039;pubs&amp;#039;, version=&amp;#039;sql2000&amp;#039;)&lt;br /&gt;
#The first part of the test uses a restored pubs database&lt;br /&gt;
#in a SQL2005 instance (local)\sql1, the second test uses the pubs database&lt;br /&gt;
#from the default instance in the same server (local machine)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    c = Connection(&amp;#039;(local)\sql1&amp;#039;,db=&amp;#039;pubs&amp;#039;, version=&amp;#039;sql2005&amp;#039;)&lt;br /&gt;
    print &amp;quot;Connection string: &amp;quot; + c.constr&lt;br /&gt;
    if c.connected == 1:&lt;br /&gt;
        print &amp;quot;Connected OK&amp;quot;&lt;br /&gt;
    cu = c.cursor&lt;br /&gt;
    lst = cu.execute(&amp;#039;select * from authors&amp;#039;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    rows = cu.fetchall()&lt;br /&gt;
    for x in rows:&lt;br /&gt;
        print x&lt;br /&gt;
    c.close()&lt;br /&gt;
&lt;br /&gt;
    #Several SQL statements test&lt;br /&gt;
    lst = cu.execute(&amp;quot;sp_addlogin &amp;#039;test2&amp;#039;, &amp;#039;test2&amp;#039;&amp;quot;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    lst = cu.execute(&amp;quot;select name from master..syslogins where name = &amp;#039;test2&amp;#039;&amp;quot;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    rows = cu.fetchall()&lt;br /&gt;
    for x in rows:&lt;br /&gt;
        print x&lt;br /&gt;
    c.close()&lt;br /&gt;
&lt;br /&gt;
    lst = cu.execute(&amp;quot;EXEC sp_droplogin &amp;#039;test2&amp;#039;&amp;quot;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    lst = cu.execute(&amp;quot;select name from master..syslogins where name = &amp;#039;test2&amp;#039;&amp;quot;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    rows = cu.fetchall()&lt;br /&gt;
    for x in rows:&lt;br /&gt;
        print x&lt;br /&gt;
    c.close()&lt;br /&gt;
&lt;br /&gt;
    lst = cu.execute(&amp;quot;CREATE DATABASE test&amp;quot;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    lst = cu.execute(&amp;quot;select name from master..sysdatabases where name = &amp;#039;test&amp;#039;&amp;quot;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    rows = cu.fetchall()&lt;br /&gt;
    for x in rows:&lt;br /&gt;
        print x&lt;br /&gt;
    c.close()&lt;br /&gt;
&lt;br /&gt;
    lst = cu.execute(&amp;quot;DROP DATABASE test&amp;quot;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    lst = cu.execute(&amp;quot;select name from master..sysdatabases where name = &amp;#039;test&amp;#039;&amp;quot;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    rows = cu.fetchall()&lt;br /&gt;
    for x in rows:&lt;br /&gt;
        print x&lt;br /&gt;
    c.close()&lt;br /&gt;
&lt;br /&gt;
    print &amp;quot;\n\nRepeating test with SQL2000&amp;quot;&lt;br /&gt;
    c = Connection(&amp;#039;(local)&amp;#039;,db=&amp;#039;pubs&amp;#039;, version=&amp;#039;sql2000&amp;#039;)&lt;br /&gt;
    print &amp;quot;Connection string: &amp;quot; + c.constr&lt;br /&gt;
    if c.connected == 1:&lt;br /&gt;
        print &amp;quot;Connected OK&amp;quot;&lt;br /&gt;
    cu = c.cursor&lt;br /&gt;
    lst = cu.execute(&amp;#039;select * from authors&amp;#039;)&lt;br /&gt;
    print &amp;#039;rowcount=&amp;#039; + str(cu.rowcount)&lt;br /&gt;
    rows = cu.fetchall()&lt;br /&gt;
    for x in rows:&lt;br /&gt;
        print x&lt;br /&gt;
    c.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
</feed>