(開開心心每一天~ ---蟲癮師)html
Python Web(Django) 與SQL SERVRE的鏈接————Come QQ羣:607021567(裏面有不少開源代碼和資料,而且python的遊戲也有)前端
(一)、SQL SERVER的基本介紹(簡單)————SQL 是用於訪問和處理數據庫的標準的計算機語言。python
(二)、Django框架——Django採用了MVC的軟件設計模式,即模型M,視圖V和控制器C。web
一、SQL SERVER 基本結構sql
table---表:字段、記錄;數據庫
view---視圖:是從一個或多個基本表中定義的虛表,至關於一個窗口,經過該窗口能夠看到用戶所須要的數據;django
stored procedure---存儲過程:存儲過程的存在獨立於表,用戶能夠運用存儲過程來完善應用程序;編程
trigger---觸發器:用戶經過使用觸發器來實現各類複雜的業務規則;設計模式
indexes---索引:用戶和角色:用戶是指對數據庫具備必定權限的使用者,角色是一組具備相同權限的用戶集合;服務器
這裏Python Web(Django)須要主要用到的是 stored procedure---存儲過程 。
stored procedure---存儲過程————存儲過程是SQL語句和控制語句的預編譯集合,保存在數據庫中,能夠調用執行,而且容許用戶聲明變量.邏輯控制語句以及其餘強大的編程功能。
我會將項目中詳細用到的內容都會寫下來。
二、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')
這裏分享一個個人例子!