檢視ubuntu已安裝的所有軟體:
<code>dpkg -l </code>
<code>dpkg -l | </code><code>grep</code> <code>mysql</code>
檢視軟體安裝的路徑
<code>dpkg -L | </code><code>grep</code> <code>mysql</code>
檢視開機啟動的軟體,需要額外安裝插件:
<code>sudo</code> <code>apt-get </code><code>install</code> <code>rcconf</code>
<code>rcconf</code>
<code>更能全一點的:</code>
<code>sudo</code> <code>apt-get </code><code>install</code> <code>sysv-rc-conf</code>
<code>sysv-rc-conf</code>
安裝mysql:
<code># apt-get install python-setuptools libmysqld-dev libmysqlclient-dev </code>
<code># easy_install mysql-python</code>
<code>或者 </code><code>#pip install mysql-python</code>
django setting配置:
<code>DATABASES </code><code>=</code> <code>{</code>
<code> </code><code>'default'</code><code>: {</code>
<code> </code><code>'ENGINE'</code><code>: </code><code>'django.db.backends.mysql'</code><code>, </code>
<code> </code><code>'NAME'</code><code>: </code><code>'books'</code><code>, </code><code>#你的資料庫名稱</code>
<code> </code><code>'USER'</code><code>: </code><code>'root'</code><code>, </code><code>#你的資料庫使用者名</code>
<code> </code><code>'PASSWORD'</code><code>: '', </code><code>#你的資料庫密碼</code>
<code> </code><code>'HOST'</code><code>: '', </code><code>#你的資料庫主機,留白預設為localhost</code>
<code> </code><code>'PORT'</code><code>: </code><code>'3306'</code><code>, </code><code>#你的資料庫端口</code>
<code> </code><code>}</code>
<code>}</code>
在model子產品中添加如下建表語句:
vi app/models.py
<code>class</code> <code>test1(models.Model): </code>
<code> </code><code>name </code><code>=</code> <code>models.CharField(max_length</code><code>=</code><code>20</code><code>) </code><code>#定義的字段name為字段名</code>
model子產品在app中,其中定義的類名就是表名(但是在資料庫中的表名會以app為字首,例如項目為app則實際建立的表名為app_test1),CharField相當于varchar,DateField相當于datetime,max_length 相當于參數限定長度“varchar(20)”
<code>python manage.py makemigrations </code><code>#檢視表有哪些更改</code>
<code>python manage.py migrate app </code><code>#建立表結構</code>
注意:這裡如果之前已經同步過一次資料,現在又要添加字段,會報錯,解決辦法是在字段後面添加
null=True
例如:
為表添加資料:django需要查詢或者更新表時,需先導入表名才能擷取表内的資料。
<code>from</code> <code>app.models </code><code>import</code> <code>test1</code>
<code>def</code> <code>huoqu(request): </code>
<code> </code><code>a </code><code>=</code> <code>test1(name</code><code>=</code><code>'wangjiadongge'</code><code>) </code><code>#test1為表名,name為字段名。</code>
<code> </code><code>a.save()</code>
<code> </code><code>return</code> <code>HttpResponse(</code><code>"資料添加成功!"</code><code>)</code>
資料操作:
<code>#擷取資料</code>
<code>def</code> <code>huoqu(request): </code>
<code> </code>
<code> </code><code>#通過objects這個模型管理器的all()獲得所有資料行,相當于SQL中的SELECT * FROM</code>
<code> </code><code>list</code> <code>=</code> <code>test1.objects.</code><code>all</code><code>() </code>
<code> </code><code>#filter相當于SQL中的WHERE,可設定條件過濾結果</code>
<code> </code><code>list1 </code><code>=</code> <code>test1.objects.</code><code>filter</code><code>(</code><code>id</code><code>=</code><code>1</code><code>) </code>
<code> </code><code>#擷取單個對象</code>
<code> </code><code>list2 </code><code>=</code> <code>test.objects.get(</code><code>id</code><code>=</code><code>1</code><code>) </code>
<code> </code><code>#限制傳回的資料 相當于 SQL 中的 OFFSET 0 LIMIT 2;</code>
<code> </code><code>test1.objects.order_by(</code><code>'name'</code><code>)[</code><code>0</code><code>:</code><code>2</code><code>]</code>
<code> </code><code>#資料排序</code>
<code> </code><code>test1.objects.order_by(</code><code>"id"</code><code>)</code>
<code> </code><code>#上面的方法可以連鎖使用</code>
<code> </code><code>test1.objects.</code><code>filter</code><code>(name</code><code>=</code><code>"runoob"</code><code>).order_by(</code><code>"id"</code><code>)</code>
<code> </code><code>#輸出所有資料</code>
<code> </code><code>for</code> <code>var </code><code>in</code> <code>list</code><code>: response1 </code><code>+</code><code>=</code> <code>var.name </code><code>+</code> <code>" "</code>
<code> </code><code>response </code><code>=</code> <code>response1</code>
<code> </code><code>return</code> <code>HttpResponse(</code><code>"<p>"</code> <code>+</code> <code>response </code><code>+</code> <code>"</p>"</code><code>)</code>
<code>#更新資料</code>
<code># -*- coding: utf-8 -*-</code>
<code> </code><code>from</code> <code>django.http </code><code>import</code> <code>HttpResponse</code>
<code> </code><code>from</code> <code>app.models </code><code>import</code> <code>test1</code>
<code> </code><code>def</code> <code>testdb(request): </code><code>#修改其中一個id=1的name字段,再save,相當于SQL中的UPDATE</code>
<code> </code><code>test </code><code>=</code> <code>test1.objects.get(</code><code>id</code><code>=</code><code>1</code><code>)</code>
<code> </code><code>test.name </code><code>=</code> <code>'Google'</code>
<code> </code><code>test.save()</code>
<code> </code><code>#另外一種方式</code>
<code> </code><code>#test1.objects.filter(id=1).update(name='Google')</code>
<code> </code><code># 修改所有的列</code>
<code> </code><code># test1.objects.all().update(name='Google')</code>
<code> </code><code>return</code> <code>HttpResponse(</code><code>"<p>修改成功</p>"</code><code>)</code>
<code>#删除資料</code>
<code> </code><code>from</code> <code>app.models </code><code>import</code> <code>Test</code>
<code> </code><code># 資料庫操作def testdb(request): # 删除id=1的資料</code>
<code> </code><code>test1 </code><code>=</code> <code>Test.objects.get(</code><code>id</code><code>=</code><code>1</code><code>)</code>
<code> </code><code>test1.delete()</code>
<code> </code><code>#test1.objects.filter(id=1).delete()</code>
<code> </code><code>#删除所有資料</code>
<code> </code><code>#test1.objects.all().delete()</code>
<code> </code><code>return</code> <code>HttpResponse(</code><code>"<p>删除成功</p>"</code><code>)</code>
#django在前端中展示從資料庫中擷取到的資料:
html:
<code>{% for a in names %}</code>
<code> </code><code>id={{ a.id }}:name={{ a.name }}:sex={{ a.sex }}</code>
<code>{% endfor %}</code>
注意:這裡展示的資料必須是單條資料,若是展示整個資料庫的内容必須是逐條,整個取的話會導緻出現QuerySet [<test2: test2 object>這種資料。
django:
<code>def</code> <code>testdb(request):</code>
<code> </code>
<code> </code><code>#list = test2.objects.all()</code>
<code> </code><code>names </code><code>=</code> <code>test2.objects.</code><code>filter</code><code>(</code><code>id</code><code>=</code><code>1</code><code>)</code>
<code> </code><code>print</code> <code>names</code>
<code> </code><code>#return HttpResponse('this is test select mysql!')</code>
<code> </code><code>return</code> <code>render_to_response(</code><code>'a.html'</code><code>,</code><code>locals</code><code>()) </code><code>#locals()是擷取整個本地變量</code>
-------------------分割線--------------------
#django經典例子:
<code>from</code> <code>django.db </code><code>import</code> <code>models </code><code>#導入models子產品</code>
<code>#表名:</code>
<code>class</code> <code>publisher(models.Model): </code><code>#定義表名為publish</code>
<code> </code><code>name</code><code>=</code><code>models.CharField(max_length</code><code>=</code><code>30</code><code>) </code><code>#表字段name</code>
<code> </code><code>address</code><code>=</code><code>models.CharField(max_length</code><code>=</code><code>50</code><code>) </code><code>#表字段address</code>
<code> </code><code>city</code><code>=</code><code>models.CharField(max_length</code><code>=</code><code>60</code><code>) </code><code>#表字段city</code>
<code> </code><code>state_province</code><code>=</code><code>models.CharField(max_length</code><code>=</code><code>30</code><code>) </code>
<code> </code><code>county</code><code>=</code><code>models.CharField(default</code><code>=</code><code>"CN"</code><code>,max_length</code><code>=</code><code>50</code><code>)</code>
<code> </code><code>website</code><code>=</code><code>models.URLField() </code><code>#表字段website,字段類型為位址</code>
<code>表名:</code>
<code>class</code> <code>author(models.Model):</code>
<code> </code><code>first_name</code><code>=</code><code>models.CharField(max_length</code><code>=</code><code>30</code><code>)</code>
<code> </code><code>last_name</code><code>=</code><code>models.CharField(max_length</code><code>=</code><code>40</code><code>)</code>
<code> </code><code>email</code><code>=</code><code>models.EmailField(blank</code><code>=</code><code>True</code><code>) </code><code>#字段名字為email,字段類型為email</code>
<code>class</code> <code>book(models.Model):</code>
<code> </code><code>title</code><code>=</code><code>models.CharField(max_length</code><code>=</code><code>100</code><code>) </code><code>#字段名為title,字段類型為vachar</code>
<code> </code><code>authors</code><code>=</code><code>models.ManyToManyField(author) </code><code>#字段名為author,字段類型為ManyToManyField</code>
<code> </code><code>publisher</code><code>=</code><code>models.ForeignKey(publisher) </code><code>#關聯外部表publisher</code>
<code> </code><code>publication_date</code><code>=</code><code>models.DateField() </code><code>#字段名為publication_date,類型為日期類型</code>
<code>python manage.py makemigrations </code><code>#檢視表有哪些更改</code>
<code>python manage.py migrate </code><code>#同步資料庫</code>
<code>#運作上面這條指令出現的錯誤:</code>
<code>#Apply all migrations: admin, app, auth, contenttypes, sessions</code>
<code>#Running migrations:</code>
<code>#解決:這個錯誤是因為已經同步過一次資料庫引起的,如果表中的字段要增加,需要添加null=True</code>
<code>#比如:ages=models.CharField(max_length=10,null=True)</code>
<code>#如果是建立一個表,則要删除app中migrations檔案夾(一般不需要)。</code>
#如果需要使用者和密碼,則執行:
<code>python manage.py createsuperuser </code><code>#建立使用者</code>
<code>python manage.py changepassword </code><code>#更改密碼</code>
#練習在python互動模式下操作資料庫:
<code>.</code><code>/</code><code>manage.py shell </code><code>#進入django變量的互動器</code>
<code>from</code> <code>app.models </code><code>import</code> <code>publisher </code><code>#導入publisher資料庫。</code>
#插入一條資料:
<code>p1</code><code>=</code><code>publisher(name</code><code>=</code><code>'qinghua university'</code><code>,address</code><code>=</code><code>'wudaokou'</code><code>,city</code><code>=</code><code>'beijing'</code><code>,state_province</code><code>=</code><code>'beijing'</code><code>,county</code><code>=</code><code>'china'</code><code>,website</code><code>=</code><code>'www.qinghua.com'</code><code>)</code>
p1.name #檢視插入的name
p1.address #檢視插入的address
p1.save() #插入的資料寫入資料庫中
#更新一條資料:
<code>p1.address</code><code>=</code><code>"qinghualu"</code>
<code>p1.save()</code>
#檢視所有的資料
在models子產品中,建表語句下面添加如下:
<code>def</code> <code>__unicode__(</code><code>self</code><code>):</code>
<code> </code><code>return</code> <code>self</code><code>.name,</code><code>self</code><code>.address</code>
然後再去交換視窗檢視所有資料:
<code>publisher.objects.</code><code>all</code><code>()</code>
#查詢國家等于中國的一條資料:
<code>publisher.objects.</code><code>filter</code><code>(country</code><code>=</code><code>"china"</code><code>)</code>
#查詢出來的資料進行更改:
<code>a</code><code>=</code><code>publisher.objects.get(name</code><code>=</code><code>"beijing"</code><code>)</code>
<code>a.county</code><code>=</code><code>"USA"</code>
<code>a.save()</code>
#高效的更新資料方式,并且無需save:
<code>publisher.objects.</code><code>filter</code><code>(</code><code>id</code><code>=</code><code>1</code><code>).update(name</code><code>=</code><code>"qingdaodaxue"</code><code>)</code>
#在浏覽器中打開背景管理資料庫界面:
http://192.168.110.106/admin/
賬号就是同步資料庫時建立的使用者名和密碼,登陸進去。
在app下建立一個admin.py的檔案
vi admin.py
<code>from</code> <code>django.contrib </code><code>import</code> <code>admin</code>
<code>from</code> <code>app.models </code><code>import</code> <code>publisher,author,book</code>
<code>admin.site.register(publisher)</code>
<code>admin.site.register(author)</code>
<code>admin.site.register(book)</code>
完成後,重新打開頁面。
#django中引用bootstrap:
在setting.py中:
MEDIA_ROOT='/root/project/statics/bootstrap/'
在url.py中:
from django.conf import settings
--------------------------------------分割線------------------------------------
本文轉自 王家東哥 51CTO部落格,原文連結:http://blog.51cto.com/xiaodongge/1903793