• Python Web(Django)连接SQL SERVER


    (开开心心每一天~ ---虫瘾师)

     

    Python Web(Django) 与SQL SERVRE的连接————Come QQ群:607021567(里面有很多开源代码和资料,并且python的游戏也有)

    (一)、SQL SERVER的基本介绍(简单)————SQL 是用于访问和处理数据库的标准的计算机语言。

    (二)、Django框架——Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。

     

    1、SQL SERVER 基本结构

      table---表:字段、记录;

       view---视图:是从一个或多个基本表中定义的虚表,相当于一个窗口,通过该窗口可以看到用户所需要的数据;

      stored procedure---存储过程:存储过程的存在独立于表,用户可以运用存储过程来完善应用程序;

      trigger---触发器:用户通过使用触发器来实现各种复杂的业务规则;

      indexes---索引:用户和角色:用户是指对数据库具有一定权限的使用者,角色是一组具有相同权限的用户集合;

    这里Python Web(Django)需要主要用到的是  stored procedure---存储过程 。

    stored procedure---存储过程————存储过程是SQL语句和控制语句的预编译集合,保存在数据库中,可以调用执行,并且允许用户声明变量.逻辑控制语句以及其他强大的编程功能。

    我会将项目中详细用到的内容都会写下来。

    2、Django框架 基本结构

     ---->主项目文件夹

      ----->工程文件夹

        主控文件: ----->settings.py ——主要控制你的静态文件,和python自带数据库,也可使用它来连接数据库

              ----->urls.py ——web前端通过后台需要访问的地址,并且静态文件的地址也是需要写在这里的 

              ----->wsgi.py ——服务器管理处

      ------>templates :模板文件夹,可以在创建一个脚本文件夹static

    这里我们不需要用python创建后自带的连接数据库文件,因为这样要考虑到没有用软件来创建项目的人,他们的文件位置也可以改变,但是项目文件夹必须有一个。

    连接sql server 需要自己写py文件。

    ----先要知道SQL SERVER的存储过程和表的实例:

    首先创建SQL SERVER 的数据库和表,我就随便创建一个了

     

    create table table_1
    (
    id int primary key identity(1,1) not null,
    name varchar(50) not null,
    age int not null
    )

    因为是随便创建的表,所以都是默认下去的!接下来,是对存储过程。

    新建存储过程:

    create proc  xxxxx --存储过程名字
    as
    select * FROM table_1
    --SQL 语句
    go

    创建完之后,我们的存储过程就可以根据我们前端需要来修改了,比如如果我们做个后台登录,或者成绩查询,都需要上传学生id,并且每一次查询的信息可以放在存储过程的临时表内,也可以直接返回。

    列:

    USE [my_sp]
    GO
    /****** Object:  StoredProcedure [dbo].[my_sp_py]    Script Date: 05/18/2018 15:24:28 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER proc [dbo].[my_sp_py]
    
        @userid int,
        @page int,
        @pagesize int
    as
    /*
    select * from table_1
    
    */
    SET NOCOUNT ON;
    declare @count int
    select @count =COUNT(*) from table_1
    if @count > 0    
      begin
        create table #table --临时表的结构
        (
            id bigint,
            userid int,        
            ctype nvarchar(30),
            Reduce nvarchar(10),
            num int,
            Remarks nvarchar(max),
            sum int,
            uptime datetime,    
        )
        declare @where_condition nvarchar(max)
        set @where_condition = ''
        if(@userid <>0)   
            set @where_condition = @where_condition + ' and userid='+cast(@userid as varchar)
        
        declare @filedlist nvarchar(500)
        set @filedlist = 'id,userid,ctype,Reduce,num,Remark,sum,uptime' --需要insert 到表中的字段
        
        declare @sql nvarchar(MAX)
        if @page>1      
          set @sql = 'SQL 语句'
        else
          set @sql = 'SQL 语句'
        --print @sql
        exec (@sql)     --执行SQL 语句
        select * from #table --返回的结果
      end    

    因为这个是页码和每一条数的控制,userid就是需要查询时候定义的id,到这里基本我们的存储过程就写完了!接下来就是python 连接SQL SERVER 并且访问数据库中的数据,你可以点击这里看简便的处理 连接方式 

    首先,我们需要独立创建一个py文件,创建一个类 class sql_server:

    MSSQL_INFO = {"hostname":"local","username":"local","password":"","dbname":"table_1"}

    另外,因为web应用中可以使用多个sql,所以我们把数据连接的文件放在一个单独的py文件内!

    模块:pyodbc--数据库连接 创建sqlmb.py文件

    strconn= 'DRIVER={SQL Server};SERVER='+sql_server.MSSQL_INFO.get("hostname")+';DATABASE='+sql_server.MSSQL_INFO.get("dbname")+';UID='+sql_server.MSSQL_INFO.get("username")+';PWD='+sql_server.MSSQL_INFO.get("password")
    db = pyodbc.connect(strconn)
    return db

    数据连接就到这里已经成功一半了,接下来就是我们项目中需要去访问数据库的数据了!

    使用前要import 包名(sqlmb)

    mssql_conn = sqlmb.mssqlserver_conn_db()
    c = mssql_conn.cursor()
    c.execute("{call my_sp_py (?,?,?)}", (userid,page,pagesize))
    q = c.fetchone() #fetchall所有数据
    c.commit()

    q就是数据库中所返回的数据,也就是select所返回的内容!好了,django与sql server的处理基本就是这些内容!下次再见!

    def basicinfo(request):
        logininfo = checkLogin(request)
        if logininfo and logininfo.get('loginuserid') != None and logininfo.get('loginuserid')!="":
            mssql_conn = common.mssqlserver_conn_db()
            cs = mssql_conn.cursor()
            cs.execute("{call my_sp_py  (?,?,?)}", userid,page,pagesize)
            q = cs.fetchone()
            cs.commit()
            if (q and len(q) > 0):
                if q[0] != 0:
                      a = list(q)
                        c = []
                        for i in range(0, len(a)):
                            if a[i] == None:
                                a[i] = ""
                                c.append(a[i])
                            else:
                                c.append(a[i])
                        logininfo['myname'] = c[1]
                        logininfo['companyname'] = c[2]
                        logininfo['myphone'] = c[3]
                        logininfo['faxnum'] = c[4]
                        logininfo['post'] = c[5]
                        logininfo['tradetype'] = c[6]
                        logininfo['vip'] = c[7]
                        logininfo['industry'] = c[8]
                        logininfo['province'] = c[9]
                        logininfo['city'] = c[10]
                        logininfo['county'] = c[11]
                        logininfo['useraddress'] = c[12]
            cs.execute("{call infosearch_list_py (?)}", logininfo.get('loginuserid'))
            q = cs.fetchone()
            cs.commit()
            if (q and len(q) > 0):
                if q[1]:
                    logininfo['LastLoginIP'] = q[1]
                else:
                    logininfo['LastLoginIP'] = 0
                if q[2]:
                    logininfo['LoginCount'] = q[2]
                else:
                    logininfo['LoginCount'] = 0
                if q[3]:
                    logininfo['LastLoginTime'] = q[3].strftime('%Y-%m-%d %H:%M:%S')
                else:
                    logininfo['LastLoginTime']=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
                if q[4]:
                    logininfo['lottery_num'] = q[4]
                else:
                    logininfo['lottery_num'] = 0
                if q[5]:
                    logininfo['integral_num'] = q[5]
                else:
                    logininfo['integral_num'] = 0
                if q[6]:
                    logininfo['indent_num'] = q[6]
                else:
                    logininfo['indent_num'] = 0
                if q[7]:
                    logininfo['work_order_num'] = q[7]
                else:
                    logininfo['work_order_num'] = 0
    
            cs.close()
            mssql_conn.close()
            return render_to_response('template/user_basicinfo.html',logininfo)
        else:
            return HttpResponseRedirect('/signin')

     这里分享一个我的例子!

  • 相关阅读:
    输出国际象棋&&输出余弦曲线
    打鱼晒网问题
    ATM模拟程序
    getline()函数
    AC小笔记
    ural 1208 Legendary Teams Contest
    汇编贪吃蛇
    供给与需求的市场力量
    垄断竞争
    相互依存性和贸易的好处
  • 原文地址:https://www.cnblogs.com/zhuPython/p/9056669.html
Copyright © 2020-2023  润新知