프로그램 자료/Python

파이썬에서 mssql 사용하기 pymssql

motolies 2015. 10. 16. 16:57

출처1 : http://pymssql.sourceforge.net/ref_pymssql.php

출처2 : http://pymssql.sourceforge.net/examples__mssql.php

출처3 : https://code.google.com/p/pymssql/wiki/Documentation

출처4 : https://code.google.com/p/pymssql/wiki/mssqlExamples?wl=ko


윈도우10 pro x64

vs2012 pro

파이썬 2.7.10 32bit

pymssql 2.1.1


사용중입니다. 


처음에 파이썬 3.5 x64 버전을 설치하고 

Unable to find vcvarsall.bat 에러 때문에 한 참 고민했었는데

파이썬 2.7 버전 설치 후 정상동작을 하네요.


모듈도 호환성을 많이 타나 봅니다.




Quickstart usage of various features:
import _mssql
conn = _mssql.connect(server='SQL01', user='user', password='password', \
    database='mydatabase')
conn.execute_non_query('CREATE TABLE persons(id INT, name VARCHAR(100))')
conn.execute_non_query("INSERT INTO persons VALUES(1, 'John Doe')")
conn.execute_non_query("INSERT INTO persons VALUES(2, 'Jane Doe')") 



# how to fetch rows from a table
conn.execute_query('SELECT * FROM persons WHERE name = %s''John Doe')
for row in conn:
    print "ID=%d, Name=%s" % (row['id'], row['name']) 



# examples of other query functions
numemployees = conn.execute_scalar("SELECT COUNT(*) FROM persons ")
numemployees = conn.execute_scalar("SELECT COUNT(*) FROM persons WHERE name LIKE 'J%'")    # note that '%' is not a special character here
employeedata = conn.execute_row("SELECT * FROM persons WHERE id=%d", 13) 



# how to fetch rows from a stored procedure
conn.execute_query('sp_spaceused')   # sp_spaceused without arguments returns 2 result sets
res1 = [ row for row in conn ]       # 1st result
res2 = [ row for row in conn ]       # 2nd result 



# how to get an output parameter from a stored procedure
sqlcmd = """
DECLARE @res INT
EXEC usp_mystoredproc @res OUT
SELECT @res
"""

res = conn.execute_scalar(sqlcmd) 



# how to get more output parameters from a stored procedure
sqlcmd = """
DECLARE @res1 INT, @res2 TEXT, @res3 DATETIME
EXEC usp_getEmpData %d%s, @res1 OUT, @res2 OUT, @res3 OUT
SELECT @res1, @res2, @res3
"""

res = conn.execute_row(sqlcmd, (13, 'John Doe')) 



# examples of queries with parameters
conn.execute_query('SELECT * FROM persons WHERE id=%d', 13)
conn.execute_query('SELECT * FROM persons WHERE name=%s''John Doe')
conn.execute_query('SELECT * FROM persons WHERE id IN (%s)', ((5, 6),))
conn.execute_query('SELECT * FROM persons WHERE name LIKE %s''J%')
conn.execute_query('SELECT * FROM persons WHERE name=%(name)s AND city=%(city)s', \
    { 'name''John Doe''city''Nowhere' } )
conn.execute_query('SELECT * FROM persons WHERE salesrep=%s AND id IN (%s)', \
    ('John Doe', (1, 2, 3)))
conn.execute_query('SELECT * FROM persons WHERE id IN (%s)', (tuple(xrange(4)),))
conn.execute_query('SELECT * FROM persons WHERE id IN (%s)', \
    (tuple([3, 5, 7, 11]),)) 



conn.close()

Please note the usage of iterators and ability to access results by column name. Also please note that parameters to connect method have different names than in pymssql module.


An example of exception handling:
import _mssql
try:
    conn = _mssql.connect(server='SQL01', user='user', password='password', \
        database='mydatabase')
    conn.execute_non_query('CREATE TABLE t1(id INT, name VARCHAR(50))')
except _mssql.MssqlDatabaseException,e:
    if e.number == 2714 and e.severity == 16:
        # table already existed, so quieten the error
    else:
        raise # re-raise real error
finally:
    conn.close()

Please see more info on exceptions below.