Pyhton_Django學習筆記(五) 模型與MYSQL資料庫使用

來源:互聯網
上載者:User

先上簡單DEMO 使用MYSQL資料庫顯示資料

from django.shortcuts import render_to_response
import MySQLdb

def book_list(request):
    db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')
    cursor = db.cursor()
    cursor.execute('SELECT name FROM books ORDER BY name')
    names = [row[0] for row in cursor.fetchall()]
    db.close()
    return render_to_response('book_list.html', {'names': names})

 Django提供了在設定檔中 settings.py中設定資料庫的支援。

例如:在settings.py中編輯:

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'mysql', 
        'NAME': 'mydb',                  
        'USER': 'me',                     
        'PASSWORD': 'secret',             
        'HOST': 'localhost',                     
        'PORT': '',                   
    }
}

這樣在第一段代碼中。可以簡化成:

 

from django.db import connection

    cursor = connection.cursor()
    cursor.execute('select name from books')
    names = [row[0] for row in cursor.fetchall()]
    return render_to_response('book_list.html',{'name':names})

 ===============================================================================

下面來說下,用Django的支援做MYSQL的資料模組建立。

 

 1、CMD項目路徑下。執行:python manage.py startapp books

books是建立的模組名稱,這條命令在項目下建立了一個books目錄。

這個目錄下包含建立產生的檔案:__init__.py,models.py,tests.py,view.py

 2、開啟models.py 檔案 編輯內容如下:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

 完成這些代碼後,啟用這個模型。

3、開啟settings.py 檔案,定位到 INSTALLED_APPS設定節點。

先注釋掉裡面的自動產生對象。

並添加代碼如下:

INSTALLED_APPS = (
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.sites',
    'mysite.books',
)

 現在我們建立資料庫表

 先在CMD中驗證 model檔案資料是否符合標準。 執行:python manage.py validate

如果顯示 0 errors found.表示文法OK。

繼續執行  python mange.py sqlall books,這個命令式協助你產生SQL指令碼,你可以複製粘貼到資料庫執行操作。

還有一個方法 是直接連到資料庫,並執行建立表操作。命令:python manage.py syncdb

 syncdb命令是同步你得模型到資料庫。它根據INSTALLED_APPS裡設定的APP來檢查資料庫,如果表不存在,就建立。

 寫測試方法:

def createpub(request):
        p1 = Publisher(name='Apress',address='2855 Telegraph Avenue',city='Berkeley',state_province='CA',country='U.S.A',website='http://www.sina.com.cn')
        p1.save()
        p2 = Publisher(name='B World',address='2866 Telegraph Avenue',city='Beijing',state_province='CN',country='HK',website='http://www.qq.com')
        p2.save()
        pub = Publisher.objects.filter(name='Apress')
        return render_to_response('book_list.html',{'name':pub})

 寫對應的模板頁和URLS配置。

運行 效果如下 

[<Publisher: Publisher object>, <Publisher: Publisher object>]

列印出的東西並沒有得到我們想要的結果,先來解決這個問題。

修改 models.py 檔案內容如下:

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    website = models.URLField()
    def __unicode__(self):
        return self.name

    
class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()
    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)

    
class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
    def __unicode__(self):
        return self.title

 再運行,輸出正常。OBJECTS還有很多操作,這個找對應的文檔查看更多。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.