數據庫表的創建:
1、Django工程項目建立,基礎環境調試。
2、創建表
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)#定義外鍵的時候,在創建該表時,數據庫自動的會增加_id在其名字后面,即publisher_id
publication_date = models.DateField()
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)#定義外鍵的時候,在創建該表時,數據庫自動的會增加_id在其名字后面,即publisher_id
publication_date = models.DateField()
3、告訴整個項目,激活該model.py文件,在項目setting.py中進行激活:
INSTALLED_APPS = (
'app.books',
)
'app.books',
)
4、在shell中驗證model代碼的正確性,
驗證無誤后,執行代碼,將其轉換為sql語言:
python manage.py validate
python manage.py sqlall books
validate
命令檢查你的模型的語法和邏輯是否正確。 如果一切正常,你會看到 0 errors found 消息。
5、同步到數據庫中,syncdb僅僅創建數據庫里還沒有的表,它 並不 對你數據模型的修改進行同步,也不處理數據模型的刪除
python manage.py syncdb
python manage.py migrate
數據庫的增刪查改:
1、插入記錄
p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',
... city='Berkeley', state_province='CA', country='U.S.A.',
... website='http://www.apress.com/')
>>> p1.save()
... city='Berkeley', state_province='CA', country='U.S.A.',
... website='http://www.apress.com/')
>>> p1.save()
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
save()每次都更新所有列,update()則每次更新指定列
2、關鍵字查詢
Publisher.objects.filter(name='Apress')
上面的例子中``
filter()`` 函數返回一個記錄集,這個記錄集是一個列表。 相對列表來說,有些時候我們更需要獲取單個的對象, `` get()``
方法就是在此時使用的:
filter()`` 函數返回一個記錄集,這個記錄集是一個列表。 相對列表來說,有些時候我們更需要獲取單個的對象, `` get()``
方法就是在此時使用的:
Publisher.objects.get(name="Apress")
3、數據集合排序
>>>Publisher.objects.order_by("name")
>>> Publisher.objects.order_by("-name") #倒序
4、刪除記錄
Publisher.objects.filter(country='USA').delete()
執行數據庫的SQL命令
1.導入django.db的connection模塊,建立與數據庫的鏈接,在之前一定要在settings.py上設置好數據庫,並且執行
python manage.py syncdb同步數據庫
>>> from django.db import connection
>>> cursor=connection.cursor()
>>> cursor=connection.cursor()
如果不在django框架下,連接數據庫的操作為:
import MySQLdb conn=MySQLdb.connect(host="localhost",user="root",passwd="123",db="mydatabase")
cursor=conn.cursor()
2.設置SQL命令:
>>> cursor.execute("""
... SELECT DISTINCT first_name
... FROM books_author
... WHERE last_name = %s""",['miao'])
3.執行命令:
>>> row = cursor.fetchone()
cursor對象用擁有的方法如下:
cursor用來執行命令的方法:
callproc(self, procname, args):用來執行存儲過程,接收的參數為存儲過程名和參數列表,返回值為受影響的行數
execute(self, query, args):執行單條sql語句,接收的參數為sql語句本身和使用的參數列表,返回值為受影響的行數
executemany(self, query, args):執行單條sql語句,但是重復執行參數列表里的參數,返回值為受影響的行數
nextset(self):移動到下一個結果集
execute(self, query, args):執行單條sql語句,接收的參數為sql語句本身和使用的參數列表,返回值為受影響的行數
executemany(self, query, args):執行單條sql語句,但是重復執行參數列表里的參數,返回值為受影響的行數
nextset(self):移動到下一個結果集
cursor用來接收返回值的方法:
fetchall(self):接收全部的返回結果行.
fetchmany(self,
size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
fetchone(self):返回一條結果行.
scroll(self,
value,
mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一
行移動value條.
fetchall(self):接收全部的返回結果行.
fetchmany(self,
size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
fetchone(self):返回一條結果行.
scroll(self,
value,
mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一
行移動value條.