天天看点

python 使用pymssql连接sql server数据库

Python连接SQL Server数据库 - pymssql使用基础   

下面是pymssql里参数使用说明,如下:

pymssqlCnx类(用于连接Mssql数据库)

pymssql.connect()来初始化连接类,它允许如下的参数。

dsn:连接字符串,主要用于与之前版本的pymssql兼容

user:用户名

password:密码

trusted:布尔值,指定是否使用windows身份认证登陆

host :主机名

database:数据库

timeout:查询超时

login_timeout:登陆超时

charset:数据库的字符集

as_dict:布尔值,指定返回值是字典还是元组

max_conn:最大连接数

2. Method

autocommit(status)

布尔值,指示是否自动提交事务,默认的状态是关闭的,如果打开,你必须调用commit()方法来提交事务。

close()

关闭连接

cursor()

返回游标对象,用于查询和返回数据

commit()

提交事务。

rollback()

回滚事务

pymssqlCursor类

用于从数据库查询和返回数据

rowcount

返回最后操作影响的行数。

connection

返回创建游标的连接对象

lastrowid

返回插入的最后一行

rownumber

返回当前数据集中的游标(通过索引)

3. 游标方法

关闭游标

execute(operation)

执行操作

execute(operation, params)

执行操作,可以提供参数进行相应操作

executemany(operation, params_seq)

执行操作,Params_seq为元组

fetchone()

在结果中读取下一行

fetchmany(size=None)

在结果中读取指定数目的行

fetchall()

读取所有行

nextset()

游标跳转到下一个数据集

<code>#coding=utf-8 </code>

<code>#!/usr/bin/env python</code>

<code>#-------------------------------------------------------------------------------</code>

<code># Name: pymssqlTest.py</code>

<code># Purpose: 测试 pymssql库,该库到这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql</code>

<code>#</code>

<code># Author: scott</code>

<code># Created: 04/02/2012</code>

<code>import</code> <code>pymssql</code>

<code>class</code> <code>MSSQL:</code>

<code>    </code><code>"""</code>

<code>    </code><code>对pymssql的简单封装</code>

<code>    </code><code>pymssql库,该库到这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql</code>

<code>    </code><code>使用该库时,需要在Sql Server Configuration Manager里面将TCP/IP协议开启</code>

<code>    </code><code>用法:</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>,host,user,pwd,db):</code>

<code>        </code><code>self</code><code>.host </code><code>=</code> <code>host</code>

<code>        </code><code>self</code><code>.user </code><code>=</code> <code>user</code>

<code>        </code><code>self</code><code>.pwd </code><code>=</code> <code>pwd</code>

<code>        </code><code>self</code><code>.db </code><code>=</code> <code>db</code>

<code>    </code><code>def</code> <code>__GetConnect(</code><code>self</code><code>):</code>

<code>        </code><code>"""</code>

<code>        </code><code>得到连接信息</code>

<code>        </code><code>返回: conn.cursor()</code>

<code>        </code><code>if</code> <code>not</code> <code>self</code><code>.db:</code>

<code>            </code><code>raise</code><code>(NameError,</code><code>"没有设置数据库信息"</code><code>)</code>

<code>        </code><code>self</code><code>.conn </code><code>=</code> <code>pymssql.connect(host</code><code>=</code><code>self</code><code>.host,user</code><code>=</code><code>self</code><code>.user,password</code><code>=</code><code>self</code><code>.pwd,database</code><code>=</code><code>self</code><code>.db,charset</code><code>=</code><code>"utf8"</code><code>)</code>

<code>        </code><code>cur </code><code>=</code> <code>self</code><code>.conn.cursor()</code>

<code>        </code><code>if</code> <code>not</code> <code>cur:</code>

<code>            </code><code>raise</code><code>(NameError,</code><code>"连接数据库失败"</code><code>)</code>

<code>        </code><code>else</code><code>:</code>

<code>            </code><code>return</code> <code>cur</code>

<code>    </code><code>def</code> <code>ExecQuery(</code><code>self</code><code>,sql):</code>

<code>        </code><code>执行查询语句</code>

<code>        </code><code>返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段</code>

<code>        </code><code>调用示例:</code>

<code>                </code><code>ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")</code>

<code>                </code><code>resList = ms.ExecQuery("SELECT id,NickName FROM WeiBoUser")</code>

<code>                </code><code>for (id,NickName) in resList:</code>

<code>                    </code><code>print str(id),NickName</code>

<code>        </code><code>cur </code><code>=</code> <code>self</code><code>.__GetConnect()</code>

<code>        </code><code>cur.execute(sql)</code>

<code>        </code><code>resList </code><code>=</code> <code>cur.fetchall()</code>

<code>        </code><code>#查询完毕后必须关闭连接</code>

<code>        </code><code>self</code><code>.conn.close()</code>

<code>        </code><code>return</code> <code>resList</code>

<code>    </code><code>def</code> <code>ExecNonQuery(</code><code>self</code><code>,sql):</code>

<code>        </code><code>执行非查询语句</code>

<code>            </code><code>cur = self.__GetConnect()</code>

<code>            </code><code>cur.execute(sql)</code>

<code>            </code><code>self.conn.commit()</code>

<code>            </code><code>self.conn.close()</code>

<code>        </code><code>self</code><code>.conn.commit()</code>

<code>def</code> <code>main():</code>

<code>## ms = MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")</code>

<code>## #返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段</code>

<code>## ms.ExecNonQuery("insert into WeiBoUser values('2','3')")</code>

<code>    </code><code>ms </code><code>=</code> <code>MSSQL(host</code><code>=</code><code>"localhost"</code><code>,user</code><code>=</code><code>"sa"</code><code>,pwd</code><code>=</code><code>"123456"</code><code>,db</code><code>=</code><code>"PythonWeiboStatistics"</code><code>)</code>

<code>    </code><code>resList </code><code>=</code> <code>ms.ExecQuery(</code><code>"SELECT id,weibocontent FROM WeiBo"</code><code>)</code>

<code>    </code><code>for</code> <code>(</code><code>id</code><code>,weibocontent) </code><code>in</code> <code>resList:</code>

<code>        </code><code>print</code> <code>str</code><code>(weibocontent).decode(</code><code>"utf8"</code><code>)</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>main()</code>

注意事项:

    使用pymssql进行中文操作时候可能会出现中文乱码,我解决的方案是:

文件头加上 #coding=utf8

sql语句中有中文的时候进行encode

   insertSql = "insert into WeiBo([UserId],[WeiBoContent],[PublishDate]) values(1,'测试','2012/2/1')".encode("utf8")

 连接的时候加入charset设置信息

    pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")