python 链接sqlserver 写接口实例


Posted in Python onMarch 11, 2020

我是使用pymssql完成的sqlserver,首先下载符合版本的pymssql的whl,然后安装,在pycharm的default setting->project Interpreter中确定项目的Interpreter有pymssql,然后就开始了~

` # -*- coding:utf-8 -*-
import hashlib
import hmac
import json
import pymssql
from requests import Response
from rest_framework import status, generics
from rest_framework.decorators import api_view
from rest_framework.views import APIView
from django.http import HttpResponse, HttpRequest
@api_view(['GET', 'POST'])
def userlogin(req,format=None):
  ms = MSSQL(host="你的IP地址", user="你的数据库账号", pwd="你的数据库密码", db="你的数据库名")
  if req.method == 'GET':
    username = req.GET['username']
    password = req.GET['password']
  elif req.method == 'POST':
    username= req.POST['username']
    password = req.POST['password']
  newsql = "select * from System_Users where Mobile = '"+username+"'"
  print(newsql)
  reslist = ms.ExecQuery(newsql.encode('utf-8'))
  # //验证password加密后==LoginPwd
  print(password)
  print(reslist[0].get("LoginKey"))
  if Encrypt(password,reslist[0].get("LoginKey"))==reslist[0].get("LoginKey"):
    reslist =json_success(reslist)
  else:
    reslist =json_error(reslist)
  # meizis = System_Users.objects.all()
  # serializer = MeiziSerializer(reslist, many=True)
  # return Response(serializer.data)
  return HttpResponse(json.dumps(reslist, default=lambda obj: obj.__dict__), content_type='application/json')
  # return reslist

def Encrypt(password="",salt = ""):
  clearBytes=[]
  hasheByte=[]
  # # encoding = unicode
  # clearBytes= bytes(salt.lower().strip()+password.strip(),encoding='Unicode')
  # salt = crypt.mksalt(crypt.METHOD_SHA512)
  # 然后再进行数据加密:
  # hasheByte = crypt.crypt("helloworld", salt)
  # hasheByte =crypt.crypt(clearBytes, salt)
  # password = hmac.new(key=clearBytes, msg=password)
  # 待加密信息
  str =salt.lower().strip()+password.strip()
  # 创建md5对象
  hl = hashlib.md5()
  # Tips
  # 此处必须声明encode
  # 若写法为hl.update(str) 报错为: Unicode-objects must be encoded before hashing
  print('MD5加密前为 :' + str)
  hl.update(str.encode(encoding='utf-16'))
  print('MD5加密后为 :' + hl.hexdigest())
  hl.update(str.encode(encoding='UTF-8'))
  print('MD5加密后为 :' + hl.hexdigest())
  hl.update(str.encode(encoding='GBK'))
  print('MD5加密后为 :' + hl.hexdigest())
  hl.update(str.encode(encoding='GB2312'))
  print('MD5加密后为 :' + hl.hexdigest())
  print(password)
  return password


def json_success(data, code=200, foreign_penetrate=False, **kwargs):
   data = {
     "status": code,
     "msg": "成功",
     "data": data,
   }
   print(data)
   return data

def json_error(error_string="失败", code=500, **kwargs):
   data = {
      "status": code,
      "msg": error_string,
      "data": {}
    }
   data.update(kwargs)
   return data

class MSSQL:
  def __init__(self, host, user, pwd, db):
    self.host = host
    self.user = user
    self.pwd = pwd
    self.db = db
def __GetConnect(self):
  if not self.db:
    raise (NameError, "没有设置数据库信息")
  self.conn = pymssql.connect(host=self.host, user=self.user, password=self.pwd, database=self.db, charset="GBK")
  cur = self.conn.cursor()
  if not cur:
    raise (NameError, "连接数据库失败")
  else:
    return cur

def ExecQuery(self, sql):
  cur = self.__GetConnect()
  cur.execute(sql)
  resList = cur.fetchall()
  col_names = [desc[0] for desc in cur.description]

  result = []
  for row in resList:
    objDict = {}
    # 把每一行的数据遍历出来放到Dict中
    for index, value in enumerate(row):
      index, col_names[index], value
      objDict[col_names[index]] = value
    result.append(objDict)

  # 查询完毕后必须关闭连接
  self.conn.close()
  return result

def ExecNonQuery(self, sql):
  cur = self.__GetConnect()
  cur.execute(sql)
  self.conn.commit()
  self.conn.close()

然后设置好url就ok了,这是在Django框架下,fask框架下链接数据库模块依然可以使用

补充知识:使用pycharm连接数据库---Sqlalchemy

初识sqlalchemy

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,INTEGER
#1.创建引擎
eng = create_engine("mysql+pymysql://root:admin@localhost/homework?charset=utf8")
print(eng)
#2.创建基类
Base = declarative_base()
#3.创建类(模型)
class Student(Base):
__tablename__="student1"#指定表格名称
id = Column(INTEGER,primary_key=True,autoincrement=True)
name = Column(String(32),nullable=False)#非空约束
email = Column(String(32),unique=True)#唯一约束

#4.创建表格
Base.metadata.create_all(eng)
#5删除表格
Base.metadata.drop_all(eng)

创建出来的student1表

python 链接sqlserver 写接口实例

使用Sqlalchemy四部曲:

1、使用create_engine()#连接数据库

2、Base = declarative_base()# 生成orm基类,用于创建classes

3、Base.metadata.create_all(engine) #关联engine使用metadata创建数据库表

4、使用 session = Session(engine) #创建一个会话,便于后面对数据库进行实际操作

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,INTEGER
from sqlalchemy.orm import sessionmaker
#1.创建引擎
eng = create_engine("mysql+pymysql://root:admin@localhost/homework?charset=utf8")
#2.创建基类
Base = declarative_base()
#3.创建类(模型)
class Student(Base):
  __tablename__ = "student2"
  id = Column(INTEGER,primary_key=True,autoincrement=True)
  name = Column(String(32), nullable=False) # 非空约束
  email = Column(String(32), unique=True) # 唯一约束
#4.创建表格
Base.metadata.create_all(eng)
#5.创建session
Session = sessionmaker(bind=eng)
session = Session()#创建session对象,相当于pymysql中的conn
#增加记录
# student = Student(name='刘备',email='120@qq.com')#创建student的对象
# session.add(student)#添加记录

# #批量增加
# session.add_all(
#   [
# Student(name='张飞',email='110@qq.com'),
# Student(name='悟空',email='111@qq.com'),
# Student(name='宫本',email='112@qq.com'),
# Student(name='赵云',email='113@qq.com'),
#   ]
# )

#查询操作
#first方法查询出第一条记录
# ret = session.query(Student).first()
# print(ret.id,ret.name,ret.email)
# #get方法查询指定记录
# student = session.query(Student).get(ident=2)#使用唯一标识ident不写也行查询第几条记录
# print(student.id,student.name,student.email)
#
# student = session.query(Student).filter(Student.id>2)#filter过滤相当于条件
# for stu in student:#这里的student是个对象,所以需要把他遍历出来显示查询出来的数据
#   print(stu.id,stu.name,stu.email)

# #删除操作
# # student = session.query(Student).filter(Student.id<2).delete()
# # #方式一此方法可删除多个主要是因为filter,他是条件吗满足他的都可以被删除
# student1 = session.query(Student).get(2)
# session.delete(student1)#方式二

# #修改操作
#单条修改
# student3 =session.query(Student).first()
# student3.name='百度'
# student3.email='www.baidu.com'
#指定条件修改
student4 =session.query(Student).filter(Student.id ==3).update({Student.name:'王炸',Student.email:'666@qq.com'})
session.commit()#提交事务
session.close()

python 链接sqlserver 写接口实例

python 链接sqlserver 写接口实例

以上这篇python 链接sqlserver 写接口实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python脚本对Linux服务器进行监控的教程
Apr 02 Python
Python常用小技巧总结
Jun 01 Python
Django小白教程之Django用户注册与登录
Apr 22 Python
Python实现约瑟夫环问题的方法
May 03 Python
Python正则表达式教程之一:基础篇
Mar 02 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 Python
python单向链表实例详解
May 25 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 #Python
python读取当前目录下的CSV文件数据
Mar 11 #Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 #Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 #Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 #Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 #Python
GDAL 矢量属性数据修改方式(python)
Mar 10 #Python
You might like
深入分析PHP优化及注意事项
2016/07/04 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
初识Node.js
2014/09/03 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
vuex实现简易计数器
2016/10/27 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
vue中的scope使用详解
2017/10/29 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
酒店个人培训自我鉴定
2013/12/11 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
导游词之山东红叶谷
2019/10/31 职场文书