python django 连接 sql-server
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的更多相关文章
- Django连接SQL Server,安装相关扩展包及相关配置
1.python下载 https://www.python.org/downloads/windows/ 2.根据当前windows和python的版本,下载pymssql相应的exe安装文件. ht ...
- Python web(Django)连接Sql server
(开开心心每一天~ ---虫瘾师) Python Web(Django) 与SQL SERVRE的连接----Come QQ群:607021567(里面有很多开源代码和资料,并且python的游戏也有 ...
- python 使用pymssql连接sql server数据库
python 使用pymssql连接sql server数据库 #coding=utf-8 #!/usr/bin/env python#------------------------------ ...
- python 连接sql server
linux 下pymssql模块的安装 所需压缩包:pymssql-2.1.0.tar.bz2freetds-patched.tar.gz 安装: tar -xvf pymssql-2.1.0.tar ...
- python连接sql server数据库实现增删改查
简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html).在官 ...
- python 连接 SQL Server 数据库
#!/usr/bin/python # -*- coding:utf-8 -*- import pymssql import pyodbc host = '127.0.0.1:1433' user = ...
- Python 使用Microsoft SQL Server数据库
软件环境: Windows 7 32bit Python 3.6 Download https://www.python.org/downloads/ 默认安装,并添加环境变量,一路Next ... ...
- Unity3d连接SQL Server数据库出现SocketException: 使用了与请求的协议不兼容的地址错误
这两天,同学问我Unity3d连接SQL Server的问题,当时我只是简单的说:“应该一样吧,就是那简单的几句啊”.之后他让我试了下,我才发现有问题了.故此写下一篇博客,要牢记这件事的教训,操作数据 ...
- vbs连接sql server及写文件操作
此段代码是连接SQL SERVER的 代码内connMMSQL的参数要根据实际情况传入 Function connMMSQL(ip,user,pwd,database,strsql) Dim conn ...
- NetBeans连接SQL server数据库教程
不废话,直接开始 1.下载sqljdbc.jar 可以从微软中国官方网站下载 SQLJDBC微软中国 笔者提供一个网盘链接Sqljdbc.jar 4个压缩包视版本选择,SQL 2012 用sqljdb ...
随机推荐
- ORACLE 的前后台进程
关于oracle用户进程,服务进程,后台进程 用户进程(User Process) 是一个需要与Oracle Server交互的程序 运行于客户端 当用户运行某个工具或应用程序(如SQL*Plus)时 ...
- 模块 json 和 pickle
目录 序列化 json 和 pickle 模块 序列化 序列:字符串 序列化:将其它数据类型转换成字符串的过程. 反序列化:字符串转成其它数据类型. 序列化的目的 1:以某种存储形式使用自定义对象持久 ...
- c++学习---vector
vector存放类型不同,{}有些区别-: vector的size的返回类型: push_back的使用: 要防止缓冲区溢出,使用范围for语句:
- 15_IO流
IO流 流 流的概念 流(stream)是指一连串流动字节/字符,按照先进先出的方式发送的信息的通道中. 数据源:流入通道中的数据的来源 目的地:流出通道的数据的目的地 输入流和输出流 数据源的数 ...
- react-router 5.0 的鉴权
react-router 5.0 的鉴权 当我们使用react-router 控制页面的路由时候,有些页面,是需要登录才能访问,有些不需要登录就可以访问,还有些页面,是根据用户的权限来限制访问的. 如 ...
- Mish:一个新的SOTA激活函数,ReLU的继任者
Mish:一个新的SOTA激活函数,ReLU的继任者 CVer 昨天 以下文章来源于AI公园 ,作者ronghuaiyang AI公园 专注分享干货的AI公众号,图像处理,NLP,深度学习,机器学 ...
- (十一)web服务与javaweb结合(2)
一.解决问题及解决方法 解决问题:上章节用监听器的方式是有缺陷的:web服务的端口和web工程的端口不能一致. 解决方案:将webService绑定到web工程中,使得共用一个端口. 二.案例 2.1 ...
- python实现tcp代理
1.代理流程图 2.实现代码 #! usr/bin/python2 import sys import socket import thread #handle local buffer def re ...
- CentOS 7安装Hadoop集群
准备三台虚拟机,ip分别为192.168.220.10(master).192.168.220.11(slave1).192.168.220.12(slave2) 准备好jdk-6u45-linux- ...
- C++自问
1.forwarding reference 2.move 3. map的内部实现 rb tree,但rbtree优点是什么?使用情况?和b+有啥区别? 4.顺序容器和关联容器的区别: 本质区别是顺序 ...