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")