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 相关文章推荐
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
Python多继承顺序实例分析
May 26 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
Python文本处理简单易懂方法解析
Dec 19 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
python Django框架快速入门教程(后台管理)
Jul 21 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
js获取页面description的方法
2015/05/21 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
JS作用域链详解
2017/06/26 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
接受捐赠答谢词
2014/01/27 职场文书
《满井游记》教学反思
2014/02/26 职场文书
护士工作失误检讨书
2014/09/14 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
追悼会家属答谢词
2015/09/29 职场文书
PHP获取学生成绩的方法
2021/11/17 PHP
Golang入门之计时器
2022/05/04 Golang