先上簡單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還有很多操作,這個找對應的文檔查看更多。