1.准备工作

python3.6连接sqlserver数据库需要引入pymssql模块

pymssql官方:https://pypi.org/project/pymssql/

没有安装的话需要:

pip安装:

pip install pymssql

 

2.连接数据库

首先你得明确目标数据库的:'服务器名称',"账户名称","密码","数据库名称"

因为这些是必要的参数

这里使用本地数据库做测试:

下面是链接语句:

import pymssql #引入pymssql模块

def conn():
connect = pymssql.connect('(local)', 'sa', '**********', 'test') #服务器名,账户,密码,数据库名
if connect:
print("连接成功!")
return connect if __name__ == '__main__':
conn = conn()

 

运行结果:

连接成功!

Process finished with exit code 0

 

3.增删改查(CRUD)

    创建一个新数据库表:

import pymssql

connect = pymssql.connect('(local)', 'sa', 'password1633', 'test')  #建立连接
if connect:
print("连接成功!") cursor = connect.cursor() #创建一个游标对象,python里的sql语句都要通过cursor来执行
cursor.execute("create table C_test02(id varchar(20))") #执行sql语句
connect.commit() #提交
cursor.close() #关闭游标
connect.close() #关闭连接

 

注意当执行更改数据库表的操作时,执行完sql后别忘记加一句commit().

close()是必须的,否则python程序会一至占用这个数据库.

增加(Create):

import pymssql

connect = pymssql.connect('(local)', 'sa', 'password1633', 'test')  #建立连接
if connect:
print("连接成功!") cursor = connect.cursor() #创建一个游标对象,python里的sql语句都要通过cursor来执行
sql = "insert into C_test (id, name, sex)values(1002, '张si', '女')"
cursor.execute(sql) #执行sql语句
connect.commit() #提交
cursor.close()
connect.close()

 

运行结果:

 

查询(Retrieve):

import pymssql

connect = pymssql.connect('(local)', 'sa', 'password1633', 'test')  #建立连接
if connect:
print("连接成功!") cursor = connect.cursor() #创建一个游标对象,python里的sql语句都要通过cursor来执行
sql = "select name, sex from C_test"
cursor.execute(sql) #执行sql语句
row = cursor.fetchone() #读取查询结果,
while row: #循环读取所有结果
print("Name=%s, Sex=%s" % (row[0],row[1])) #输出结果
row = cursor.fetchone() cursor.close()
connect.close()

 

运行结果:

更新(Update)和删除(Delete)的操作都大同小异.改写sql语句就行.

带 游标和存储过程的使用方法

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 django 连接 sql-server的更多相关文章

  1. Django连接SQL Server,安装相关扩展包及相关配置

    1.python下载 https://www.python.org/downloads/windows/ 2.根据当前windows和python的版本,下载pymssql相应的exe安装文件. ht ...

  2. Python web(Django)连接Sql server

    (开开心心每一天~ ---虫瘾师) Python Web(Django) 与SQL SERVRE的连接----Come QQ群:607021567(里面有很多开源代码和资料,并且python的游戏也有 ...

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

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

  4. python 连接sql server

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

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

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

  6. python 连接 SQL Server 数据库

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

  7. Python 使用Microsoft SQL Server数据库

    软件环境: Windows 7 32bit Python 3.6  Download https://www.python.org/downloads/ 默认安装,并添加环境变量,一路Next ... ...

  8. Unity3d连接SQL Server数据库出现SocketException: 使用了与请求的协议不兼容的地址错误

    这两天,同学问我Unity3d连接SQL Server的问题,当时我只是简单的说:“应该一样吧,就是那简单的几句啊”.之后他让我试了下,我才发现有问题了.故此写下一篇博客,要牢记这件事的教训,操作数据 ...

  9. vbs连接sql server及写文件操作

    此段代码是连接SQL SERVER的 代码内connMMSQL的参数要根据实际情况传入 Function connMMSQL(ip,user,pwd,database,strsql) Dim conn ...

  10. NetBeans连接SQL server数据库教程

    不废话,直接开始 1.下载sqljdbc.jar 可以从微软中国官方网站下载 SQLJDBC微软中国 笔者提供一个网盘链接Sqljdbc.jar 4个压缩包视版本选择,SQL 2012 用sqljdb ...

随机推荐

  1. 学习Electorn(1)——Hello World

    环境 操作系统是Manjaro kde 18.01 按照官网文档:https://electronjs.org/docs 安装node https://nodejs.org/en/download/p ...

  2. Centos 安装 graylog

    安装文档 安装nginx做反向代理 (如果生产环境通过端口管理则用不到) 通过yum安装方便以后升级 yum install nginx chkconfig nginx on service ngin ...

  3. Centos7.3 为php7 安装swoole 扩展

    今天心血来潮想在服务器上安装一下swoole扩展  下面列一下教程: xshell进入你的服务器  然后目录自选吧  反正我放在根目录了 下面是扩展链接: wget https://github.co ...

  4. Centos7安装gitlab11 学习笔记之备份恢复及邮箱配置

    一.备份 修改配置文件 vim /etc/gitlab/gitlab.rb 默认路径为 # gitlab_rails['backup_path'] = "/var/opt/gitlab/ba ...

  5. (四)Hibernate的增删改查操作(1)

    Hiberntae的查找操作有多种: 1.  使用Criteria接口查询 Query_Criteria.java package action; import java.util.ArrayList ...

  6. Android Studio 代码页跳界面 /java和XML快速切换技巧

    https://www.cnblogs.com/simadi/p/6698666.html?utm_source=itdadao&utm_medium=referral 今天又发现了一个And ...

  7. C#多线程的简单理解

    一.CLR线程池基础 创建和销毁线程是一个昂贵的操作,所以CLR管理了一个线程池(thread pool),可以将线程池看成一个黑盒. CLR初始化时,线程池中是没有线程的.线程的初始化与其他线程一样 ...

  8. Python练习_数据类型_day5

    1. 1.作业 1,有如下变量(tu是个元祖),请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2&qu ...

  9. 提高前端开发效率的N种方法

    一.使用固定的html模板和css公共样式 事先把模板建好,每次需要用的时候直接拿来就行,不再需要为浏览器兼容问题考虑太多时间 这里我整理了一套,希望对大家有帮助:http://www.cnblogs ...

  10. vue 钩子函数的初接触

    vue-router的路由钩子函数: 第一种:全局钩子函数. router.beforeEach((to, from, next) => { console.log('beforeEach') ...