A. 如何將前端網頁與後台資料庫連接
1、您需要掌握的第一件事是資料庫查詢語句。這是最簡單的資料庫查詢語句:SELECT * FROM sys_role,這意味著從角色表中查詢所有信息。以下顯示了查詢結果。此結果需要顯示在首頁上。需要代碼來調用這個sql語句。
B. 製作網頁的登陸登陸界面怎樣與資料庫里的內容連接全過程
你是使用的JSP嗎? 如果你是使用JSP的話,資料庫連接的步驟如下:
1.把JDBC驅動類裝載入Java虛擬機中:
Class.forName("JDBC驅動類名稱");
2.載入驅動,並與資料庫建立連接:
Connection conn=DriverManager.getConnection(資料庫連接字元串,資料庫用戶,資料庫密碼)
3.發送SQL語句:
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("SELECT a,b,c FROM TABLE");
4.處理結果 :
while(rs.nest()){
int x=rs.getint("a");
}
這就是連接資料庫,希望我的回答能讓你滿意
C. django框架如何實現與資料庫的交互(2023年最新整理)
導讀:本篇文章首席CTO筆記來給大家介紹有關django框架如何實現與資料庫的交互的相關內容,希望對大家有所幫助,一起來看看吧。
怎麼實現python寫網頁後台實現與資料庫交互1、批處理腳本中,要想與用戶實行交互,需要用到命令set配合/p參數一起使用。
2、set命令是用來定義變數並賦值的,而使用/p參數後,set並不馬上在命令中給變數賦值,而是另起一行,等待用戶的輸入,並用戶的輸入內容做為值賦給變數。
3、而且在set/p後,可以加入提示語句,讓用戶知道,程序正在等待輸入。
4、與用戶交互,雖然已經實現了用戶輸入的接收。但還需要對接收到的內容進行處理,這時可以利用if語句來完成。
5、運行後的效果如下,用戶輸入admin時,顯示「輸入正確」,否則,顯示「請輸入正確的用戶名」。
6、再來完善一下腳本代碼,做一個簡單的用戶登錄判斷。主要用到goto語句和if語句,實現python寫網頁後台實現與資料庫交互。
關於django和postgreSQL資料庫建立聯系。很急,很重要~這個估計是因為出了一個Nopsycopg2.extensionError以後,你手動或者pipinstallpsycopg2以後的界面,沒有錯誤。現在是准確的。
你現在打開你的settings.py文件,設置資料庫就OK啦
DATABASES={
'default':{
'ENGINE':'django.db.backends.postgresql_psycopg2',#這邊必須是postgresql_psycopg2.
'NAME':'mytestdb',#你的已經建好的資料庫
'USER':'myusername',#postgresql資料庫賬號
'PASSWORD':'mypassword',#資料庫密碼
'HOST':'',#Settoemptystringforlocalhost.Notusedwithsqlite3.
'PORT':'',#Settoemptystringfordefault.Notusedwithsqlite3.
}
}
如果資料庫安裝在本機,host和port都不要配置。
goodluck
django的架構設計
Django是一個基於MVC構造的框架。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以Django里更關注的是模型(Model)、模板(Template)和視圖(Views),稱為MTV模式。它們各自的職責如下:層次職責模型(Model),即數據存取層處理與數據相關的所有事務:如何存取、如何驗證有效性、包含哪些行為以及數據之間的關系等。模板(Template),即表現層處理與表現相關的決定:如何在頁面或其他類型文檔中進行顯示。視圖(View),即業務邏輯層存取模型及調取恰當模板的相關邏輯。模型與模板之間的橋梁。從以上表述可以看出Django視圖不處理用戶輸入,而僅僅決定要展現哪些數據給用戶,而Django模板僅僅決定如何展現Django視圖指定的數據。或者說,Django將MVC中的視圖進一步分解為Django視圖和Django模板兩個部分,分別決定「展現哪些數據」和「如何展現」,使得Django的模板可以根據需要隨時替換,而不僅僅限制於內置的模板。
至於MVC控制器部分,由Django框架的URLconf來實現。URLconf機制是使用正則表達式匹配URL,然後調用合適的Python函數。URLconf對於URL的規則沒有任何限制,你完全可以設計成任意的URL風格,不管是傳統的,RESTful的,或者是另類的。框架把控制層給封裝了,無非與數據交互這層都是資料庫表的讀,寫,刪除,更新的操作.在寫程序的時候,只要調用相應的方法就行了,感覺很方便。程序員把控制層東西交給Django自動完成了。只需要編寫非常少的代碼完成很多的事情。所以,它比MVC框架考慮的問題要深一步,因為我們程序員大都在寫控制層的程序。現在這個工作交給了框架,僅需寫很少的調用代碼,大大提高了工作效率。
如何在django中使用多個資料庫使用多個資料庫
NewinDjango1.2:Please,seethereleasenotes
大多數其他文檔都假設使用單一資料庫,本文主要討論如何在Django中使用多個資料庫。使用多個資料庫,要增加一些步驟。
定義你的資料庫
使用多資料庫的第一步是通過DATABASES設置要使用的資料庫服務。這個設置用於映射資料庫別名和特定的聯結設置字典,這是Django定義資料庫一貫的手法。字典內部的設置參見DATABASES文檔。
資料庫可以使用任何別名,但是default有特殊意義。當沒有選擇其他資料庫時,Django總是使用別名為default的資料庫。因此,如果你沒有定義一個名為default的資料庫時,你應當小心了,在使用資料庫前要指定你想用的資料庫。
以下是一個定義兩個資料庫的settings.py代碼片斷。定義了一個預設的PostgreSQL資料庫和一個名為users的MySQL資料庫:
DATABASES={'default':{'NAME':'app_data','ENGINE':'django.db.backends.postgresql_psycopg2','USER':'postgres_user','PASSWORD':'s3krit'},'users':{'NAME':'user_data','ENGINE':'django.db.backends.mysql','USER':'mysql_user','PASSWORD':'priv4te'}}
如果你嘗試訪問DATABASES設置中沒有定義的資料庫,Django會拋出一個django.db.utils.ConnectionDoesNotExist異常。
同步你的資料庫
syncdb管理命令一次只操作一個資料庫。預設情況下,它操作default資料庫。但是加上--database參數,你可以讓syncdb同步不同的資料庫。所以要同步我們例子中的所有資料庫的所有模型可以使用如下命令:
$./manage.pysyncdb
$./manage.pysyncdb--database=users
如果你不是同步所有的程序到同一個資料庫中,你可定義一個資料庫路由來為指定的模型實施特定的控制策略。
如果你要精細地控制同步,那麼還有一種方式是修改sqlall的輸出,手工在資料庫中執行命令,命令如下:
$./manage.pysqlallsales|./manage.pydbshell
使用其他管理命令
其他操作資料庫的django-admin.py命令與syncdb類似,他們一次只操作一個資料庫,使用--database來控制使用哪個資料庫。
自動資料庫路由
使用多資料庫最簡單的方法是設置一個資料庫路由方案。預設的路由方案確保對象「緊貼」其原本的資料庫(例如:一個對象從哪個資料庫取得,就保存回哪個資料庫)。預設的路由方案還確保如果一個資料庫沒有指定,所有的查詢都會作用於預設資料庫。
你不必為啟動預設路由方案作任何事,因為它是「開箱即用」的。但是,如果你要執行一些更有趣的資料庫分配行為的話,你可以定義並安裝你自己的資料庫路由。
資料庫路由
一個資料庫路由是一個類,這個類最多有四個方法:
db_for_read(model,**hints)
建議model對象寫操作時使用的資料庫。
如果一個資料庫操作可以提供對選擇資料庫有用的附加信息,那麼可以通過hints字典提供。詳見下文。
如果沒有建議則返回None。
db_for_write(model,**hints)
建議model對象讀操作時使用的資料庫。
如果一個資料庫操作可以提供對選擇資料庫有用的附加信息,那麼可以通過hints字典提供。詳見下文。
如果沒有建議則返回None。
allow_relation(obj1,obj2,**hints)
當obj1和obj2之間允許有關系時返回True,不允許時返回False,或者沒有意見時返回None。這是一個純粹的驗證操作,用於外鍵和多對多操作中,兩個對象的關系是否被允許。
allow_syncdb(db,model)
決定model是否可以和db為別名的資料庫同步。如果可以返回True,如果不可以返回False,或者沒有意見時返回None。這個方法用於決定一個給定資料庫的模型是否可用。
一個路由不必提供所有這些方法,可以省略其中一個或多個。如果其中一個方法被省略了,那麼Django會在執行相關檢查時跳過相應路由。
提示參數
資料庫路由接收的「提示」參數可用於決定哪個資料庫應當接收一個給定的請求。
目前,唯一可以提供的提示參數是實例,即一個與讀寫操作相關的對象的實例。可以是一個已保存的對象的實例,也可以是一個多對多關系中添加的實例。在某些情況下,也可能沒有對象的實例可以提供。路由會檢查提示實例是否存在,並相應地決定是否改變路由行為。
使用路由
資料庫路由使用DATABASE_ROUTERS設置來安裝。這個設置定義一個類名稱列表,每個類定義一個用於主路由(django.db.router)的路由。
主路由用於Django分配資料庫操作。當一個查詢想要知道使用哪個資料庫時,會提供一個模型和一個提示(如果有的話),並調用主路由。
Django就會按次序嘗試每個路由,
直到找到合適的路由建議。如果找不到路由建議就會嘗試實例提示的當前的_state.db。如果沒有提供路由提示,或者實例沒有當前資料庫狀態,那麼
主路由會分配預設資料庫。
一個例子
僅用於示例目的!
這個例子僅用於展示路由如何改變資料庫的使用。本例有意忽略了一些復雜的東西以便於更好的展示路由是如何工作的。
如果任何一個myapp中的模型包含與另一個資料庫中模型的關系時,本例是無效的。參見跨資料庫關系一節中介紹的Django引用完整性問題。
本例的主/從配置也是有缺陷的:它沒有處理復制延時(比如因為把寫操作傳遞給從資料庫耗費時間而產生的查詢不一致),也沒有考慮與資料庫使用策略的交互作用。
那麼,這個例子有什麼用呢?本例僅用於演示一個myapp存在於other資料庫,所有其他模型之間是主/從關系,且存在於master、slave1和slave2資料庫。本例使用了兩個路由:
classMyAppRouter(object):"""一個控制myapp應用中模型的所有資料庫操作的路由"""defdb_for_read(self,model,**hints):"myapp應用中模型的操作指向'other'"ifmodel._meta.app_label=='myapp':return'other'returnNonedefdb_for_write(self,model,**hints):"myapp應用中模型的操作指向'other'"ifmodel._meta.app_label=='myapp':return'other'returnNonedefallow_relation(self,obj1,obj2,**hints):"如果包含myapp應用中的模型則允許所有關系"ifobj1._meta.app_label=='myapp'orobj2._meta.app_label=='myapp':returnTruereturnNonedefallow_syncdb(self,db,model):"確保myapp應用只存在於'other'資料庫"ifdb=='other':returnmodel._meta.app_label=='myapp'elifmodel._meta.app_label=='myapp':(object):"""一個設置簡單主/從定義的路由"""defdb_for_read(self,model,**hints):"所有讀操作指向一個隨機的從資料庫"returnrandom.choice(['slave1','slave2'])defdb_for_write(self,model,**hints):"所有寫操作指向主資料庫"return'master'defallow_relation(self,obj1,obj2,**hints):"允許資料庫池中的兩個對象間的任何關系"db_list=('master','slave1','slave2')ifobj1._state.dbindb_listandobj2._state.dbindb_list:returnTruereturnNonedefallow_syncdb(self,db,model):"顯示地放置所有資料庫中的模型"returnTrue
然後在你的設置文件增加如下內容(把path.to.替換為你定義路由的模型的路徑):
DATABASE_ROUTERS=['path.to.MyAppRouter','path.to.MasterSlaveRouter']
這個設置中,路由的順序是很重要的,因為查詢時是按這個設置中的順序依次查詢的。上例中,MyAppRouter先於MasterSlaveRouter,因此,myapp中的模型就優先於其他模型。如果DATABASE_ROUTERS設置中兩個路由的順序變換了,那麼MasterSlaveRouter.allow_syncdb()會優先執行。因為MasterSlaveRouter是包羅萬象的,這樣就會導致所有模型可以使用所有資料庫。
設置好之後讓我們來運行一些代碼:
#從'credentials'資料庫獲得數據fred=User.objects.get(username='fred')fred.first_name='Frederick'#保存到'credentials'資料庫fred.save()#隨機從從資料庫獲得數據dna=Person.objects.get(name='DouglasAdams')#新對象創建時還沒有分配資料庫mh=Book(title='MostlyHarmless')#這個賦值會向路由發出請求,並把mh的資料庫設置為與author對象同樣的#資料庫mh.author=dna#這會強制'mh'實例使用主資料庫...mh.save()#...但如果我們重新獲取對象,就會從從資料庫中獲取mh=Book.objects.get(title='MostlyHarmless')
手動選擇資料庫
Django也提供一個可以讓你通過代碼完全控制資料庫使用的API。手動定義資料庫分配優先於路由。
為一個查詢集手動選擇一個資料庫
你可以在查詢集「鏈」中的任何點為查詢集選擇資料庫。我們通過在查詢集上調用using()來得到使用指定資料庫的另一個查詢集。
using()使用一個參數:你想要運行查詢的資料庫的別名。例如:
#這會運行在「預設」資料庫上。Author.objects.all()#這同樣會運行在「預設」資料庫上。Author.objects.using('default').all()#這會運行在「other」資料庫上。Author.objects.using('other').all()
為save()選擇一個資料庫
在使用Model.save()時加上using關鍵字可以指定保存到哪個資料庫。
例如,要把一個對象保存到legacy_users資料庫應該這樣做:
my_object.save(using='legacy_users')
如果你不定義using,那麼save()方法會根據路由分配把數據保存到預設資料庫中。
把一個對象從一個資料庫移動到另一個資料庫
當你已經在一個資料庫中保存了一個對象後,你可能會使用save(using=...)把這個對象移動到另一個資料庫中。但是,如果你沒有使用恰當的方法,那麼可能會出現意想不到的後果。
假設有如下的例子:
p=Person(name='Fred')p.save(using='first')#(第一句)p.save(using='second')#(第二名)
在第一名中,一個新的Person對象被保存到first資料庫中。這時,p還沒有一個主鍵,因此Django執行了一個INSERTSQL語句。這樣就會創建一個主鍵,並將這個主鍵分配給p。
在第二句中,因為p已經有了一個主鍵,所以Django在保存對象時會嘗試在新的資料庫中使用這個主鍵。如果second資料庫中沒有使用這個主鍵,那就不會有問題,該對象會復制到新資料庫。
然而,如果p的主鍵在second資料庫中已經使用過了,那麼second使用這個主鍵的已存在的對象將會被p覆蓋。
有兩種方法可以避免上述情況的發生。第一,你可以清除實例的主鍵。如果一個對象沒有主主鍵,那麼Django會把它看作一個新對象,在保存到second資料庫中時就不會帶來數據的損失:
p=Person(name='Fred')p.save(using='first')p.pk=None#清除主鍵。p.save(using='second')#寫入一個全新的對象。
第二種方法是在save()方法中使用force_insert選項來保證Django執行一個INSERTSQL:
p=Person(name='Fred')p.save(using='first')p.save(using='second',force_insert=True)
這樣可以保證名為Fred的人員在兩個資料庫中使用相同的主鍵。如果在保存到second資料庫時主鍵已被佔用,會拋出一個錯誤。
選擇一個要刪除數據的資料庫
預設情況下,一個現存對象從哪個資料庫得到,刪除這個對象也會在這個資料庫中進行:
u=User.objects.using('legacy_users').get(username='fred')u.delete()#會從`legacy_users`資料庫中刪除
通過向Model.delete()方法傳遞using關鍵字參數可以定義在哪個資料庫中刪除數據。using的用法與save()方法中使用這個參數類似。
例如,假設我們要把一個用戶從legacy_users資料庫移動到new_users資料庫可以使用如下命令:
user_obj.save(using='new_users')user_obj.delete(using='legacy_users')
多資料庫情況下使用管理器
在管理器上使用db_manager(),可以讓管理器訪問一個非預設資料庫。
例如,假設你有一個操作資料庫的自定義管理器User.objects.create_user()。
因為create_user()是一個管理器方法,不是一個查詢集,所以你不能
用User.objects.using('new_users').create_user()。(create_user()方法
只能用於User.objects管理器,而不能用於,管理器衍生出的查詢集。)解決方法是使用db_manager(),就象下面這樣:
User.objects.db_manager('new_users').create_user(...)
db_manager()返回的是綁定到你指定的資料庫的管理器的一個副本。
多資料庫情況下使用get_query_set()
如果你在管理器中重載了get_query_set(),請確保在其父類中也調用了相同的方法(使用super())或者正確處理管理器中的_db屬性(一個包含要使用的資料庫名稱的字元串)。
例如,如果你要從get_query_set方法返回一個自定義查詢集類,那麼你可以這樣做:
classMyManager(models.Manager):defget_query_set(self):qs=CustomQuerySet(self.model)ifself._dbisnotNone:qs=qs.using(self._db)returnqs
在Django管理介面中使用多資料庫
Django的管理介面沒有明顯支持多資料庫。如果想要支持的話你必須寫自定義ModelAdmin。
如果要支持多資料庫,那麼ModelAdmin對象有五個方法要自定義:
classMultiDBModelAdmin(admin.ModelAdmin):#為方便起見定義一個資料庫名稱常量。using='other'defsave_model(self,request,obj,form,change):#讓Django保存對象到'other'資料庫。obj.save(using=self.using)defdelete_model(self,request,obj):#讓Django從'other'資料庫中刪除對象。obj.delete(using=self.using)defqueryset(self,request):#讓Django在'other'資料庫中搜索對象。returnsuper(MultiDBModelAdmin,self).queryset(request).using(self.using)defformfield_for_foreignkey(self,db_field,request=None,**kwargs):#讓Django基於'other'資料庫生成外鍵控制項。returnsuper(MultiDBModelAdmin,self).formfield_for_foreignkey(db_field,request=request,using=self.using,**kwargs)defformfield_for_manytomany(self,db_field,request=None,**kwargs):#讓Django基於'other'資料庫生成多對多關系控制項。returnsuper(MultiDBModelAdmin,self).formfield_for_manytomany(db_field,request=request,using=self.using,**kwargs)
django跨