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实现bitmap数据结构详解
Feb 17 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
Apr 24 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
神经网络相关之基础概念的讲解
Dec 29 Python
Python list与NumPy array 区分详解
Nov 06 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
pyspark 随机森林的实现
Apr 24 Python
python实时监控logstash日志代码
Apr 27 Python
Anaconda详细安装步骤图文教程
Nov 12 Python
python实现登录与注册系统
Nov 30 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学习 函数 课件
2008/06/15 PHP
解析php入库和出库
2013/06/25 PHP
10个php函数实用却不常见
2015/10/13 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
JavaScript 基础问答三
2008/12/03 Javascript
JavaScript 题型问答有答案参考
2010/02/17 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
Python魔术方法详解
2015/02/14 Python
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
python MySQLdb使用教程详解
2018/03/20 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
Python @property使用方法解析
2019/09/17 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
介绍一下Java中的Class类
2015/04/10 面试题
宠物店的创业计划书范文
2014/01/11 职场文书
财产保全担保书范文
2014/04/01 职场文书
小区文明倡议书
2014/05/16 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫