天天看點

Python Web(Django)連接配接SQL SERVER

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架構 基本結構

Python Web(Django)連接配接SQL SERVER

 ---->主項目檔案夾

  ----->工程檔案夾

    主要檔案: ----->settings.py ——主要控制你的靜态檔案,和python自帶資料庫,也可使用它來連接配接資料庫

          ----->urls.py ——web前端通過背景需要通路的位址,并且靜态檔案的位址也是需要寫在這裡的 

          ----->wsgi.py ——伺服器管理處

  ------>templates :模闆檔案夾,可以在建立一個腳本檔案夾static

這裡我們不需要用python建立後自帶的連接配接資料庫檔案,因為這樣要考慮到沒有用軟體來建立項目的人,他們的檔案位置也可以改變,但是項目檔案夾必須有一個。

連接配接sql server 需要自己寫py檔案。

----先要知道SQL SERVER的存儲過程和表的執行個體:

首先建立SQL SERVER 的資料庫和表,我就随便建立一個了

 

Python Web(Django)連接配接SQL SERVER
create table table_1
(
id int primary key identity(1,1) not null,
name varchar(50) not null,
age int not null
)      

因為是随便建立的表,是以都是預設下去的!接下來,是對存儲過程。

Python Web(Django)連接配接SQL SERVER

建立存儲過程:

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')      

 這裡分享一個我的例子!

Welcome to Python world! I have a contract in this world! How about you?