连接数据库

pymssql连接数据库的方式和使用sqlite的方式基本相同:

  • 使用connect创建连接对象
  • connect.cursor创建游标对象,SQL语句的执行基本都在游标上进行
  • cursor.executeXXX方法执行SQL语句,cursor.fetchXXX获取查询结果等
  • 调用close方法关闭游标cursor和数据库连接
import pymssql

# server    数据库服务器名称或IP
# user 用户名
# password 密码
# database 数据库名称
conn = pymssql.connect(server, user, password, database) cursor = conn.cursor() # 新建、插入操作
cursor.execute("""
IF OBJECT_ID('persons', 'U') IS NOT NULL
DROP TABLE persons
CREATE TABLE persons (
id INT NOT NULL,
name VARCHAR(100),
salesrep VARCHAR(100),
PRIMARY KEY(id)
)
""")
cursor.executemany(
"INSERT INTO persons VALUES (%d, %s, %s)",
[(1, 'John Smith', 'John Doe'),
(2, 'Jane Doe', 'Joe Dog'),
(3, 'Mike T.', 'Sarah H.')])
# 如果没有指定autocommit属性为True的话就需要调用commit()方法
conn.commit() # 查询操作
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
row = cursor.fetchone()
while row:
print("ID=%d, Name=%s" % (row[0], row[1]))
row = cursor.fetchone() # 也可以使用for循环来迭代查询结果
# for row in cursor:
# print("ID=%d, Name=%s" % (row[0], row[1])) # 关闭连接
conn.close()

注意: 例子中查询操作的参数使用的%s而不是'%s'若参数值是字符串,在执行语句时会自动添加单引号

游标使用注意事项

一个连接一次只能有一个游标的查询处于活跃状态,如下:

c1 = conn.cursor()
c1.execute('SELECT * FROM persons') c2 = conn.cursor()
c2.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe') print( "all persons" )
print( c1.fetchall() ) # 显示出的是c2游标查询出来的结果 print( "John Doe" )
print( c2.fetchall() ) # 不会有任何结果

为了避免上述的问题可以使用以下两种方式:

  • 创建多个连接来保证多个查询可以并行执行在不同连接的游标上
  • 使用fetchall方法获取到游标查询结果之后再执行下一个查询, 如下:
c1.execute('SELECT ...')
c1_list = c1.fetchall() c2.execute('SELECT ...')
c2_list = c2.fetchall()

游标返回行为字典变量

上述例子中游标获取的查询结果的每一行为元组类型,
可以通过在创建游标时指定as_dict参数来使游标返回字典变量,
字典中的键为数据表的列名

conn = pymssql.connect(server, user, password, database)
cursor = conn.cursor(as_dict=True) cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
for row in cursor:
print("ID=%d, Name=%s" % (row['id'], row['name'])) conn.close()

使用with语句(上下文管理器)

可以通过使用with语句来省去显示的调用close方法关闭连接和游标

with pymssql.connect(server, user, password, database) as conn:
with conn.cursor(as_dict=True) as cursor:
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
for row in cursor:
print("ID=%d, Name=%s" % (row['id'], row['name']))

调用存储过程

pymssql 2.0.0以上的版本可以通过cursor.callproc方法来调用存储过程

with pymssql.connect(server, user, password, database) as conn:
with conn.cursor(as_dict=True) as cursor:
# 创建存储过程
cursor.execute("""
CREATE PROCEDURE FindPerson
@name VARCHAR(100)
AS BEGIN
SELECT * FROM persons WHERE name = @name
END
""") # 调用存储过程
cursor.callproc('FindPerson', ('Jane Doe',))
for row in cursor:
print("ID=%d, Name=%s" % (row['id'], row['name']))

Python连接SQL Server数据库 - pymssql使用基础的更多相关文章

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

    1.  官方api http://www.pymssql.org/en/stable/ref/pymssql.html 我学习自这里

  2. python连接sql server数据库实现增删改查

    简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html).在官 ...

  3. python 连接 SQL Server 数据库

    #!/usr/bin/python # -*- coding:utf-8 -*- import pymssql import pyodbc host = '127.0.0.1:1433' user = ...

  4. python 连接sql server数据库的示例代码

    首先,到http://pymssql.sourceforge.net/下载pymssql模块,必须安装这个模块才可以用python连接mysql 以下是sql server的操作代码,需要注意字符集 ...

  5. python连接sql server数据库

    记录一下pyodbc连接数据库的使用方法和注意事项,基于python2.7:  前提: pip install pyodbc  .下载pyodbc包.   pyodbc.connect('DRIVER ...

  6. Python 连接Sql Server数据库 MSSql

    Python 想要和MSSql数据库进行交互,首先要下载名为"pymssql"的包,然后import该包即可. 地址:https://pypi.python.org/pypi/py ...

  7. Python3.7.1学习(八) Python访问SQL Server数据库

    一.pip install pymssql即可安装pymssql库 二.Python连接SQL Server数据库     实例代码如下: # -*- coding:utf-8 -*-"&q ...

  8. python 使用pymssql连接sql server数据库

    python 使用pymssql连接sql server数据库   #coding=utf-8 #!/usr/bin/env python#------------------------------ ...

  9. python 连接sql server

    linux 下pymssql模块的安装 所需压缩包:pymssql-2.1.0.tar.bz2freetds-patched.tar.gz 安装: tar -xvf pymssql-2.1.0.tar ...

随机推荐

  1. Go开发之路(目录)

    知识点 1. Go语言 简介 2. Go语言 基本语法 3. Go语言 strings以及strconv的使用 4. Go语言 时间和日期类型 5. Go语言 指针类型 6. Go语言 流程控制 7. ...

  2. SuperMap -WebGL 实现地球的背景透明并显示自定义图片

    实现效果如图: 实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  3. LEDAPS1.3.0版本移植到windows平台----HuSr大气校正模块

    这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. HuSr是将LEDAPS项目中的TM/ET ...

  4. Android为TV端助力 反编译

    http://blog.csdn.net/vipzjyno1/article/details/21039349/ apktool.bat d -f  test.apk  test     这条命令修改 ...

  5. 基础环境系列:Apache2.4.37

    一.安装 进入官网http://www.apache.org/,滑至最下方,排名第一的HTTP Server就是我们需要的. 当前时间的最新版本是2.4.37.呃……并没有msi版本,我们选择最后一个 ...

  6. QT中pro文件编写的详细说明

    如果用QTCreator开发的小伙伴,可能都知道.pro文件,但是里面的具体配置可能比较模糊,今天我就来给大家好好讲解下 一.名称解释 QT += :这个是添加QT需要的模块 TARGET = :生成 ...

  7. MTK Android O1平台预置apk

    在MTK Android O1平台预置apk为可卸载时.预置到旧的路径system/vendor/operator/app会编译报错,"You cannot install files to ...

  8. 从0开始的Python学习008变量

    局部变量 在我们定义函数的过程中,函数内外具有相同名称的变量是没有任何关系的.变量的名称对于函数来说是局部的,而它所在的代码块就是它的作用域. 使用局部变量 #局部变量 def func(x): pr ...

  9. MongoDB基础学习

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  10. Python爬虫之正则表达式(2)

    # 最常规的匹配 import re content = 'Hello 123 4567 World_This is a Regex Demo' print(len(content)) result ...