Django:數據庫表的建立與增刪查改(ForeignKey和ManytoMany)


數據庫表的創建:

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()
3、告訴整個項目,激活該model.py文件,在項目setting.py中進行激活:
INSTALLED_APPS = (
    '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()
 
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
save()每次都更新所有列,update()則每次更新指定列
2、關鍵字查詢
Publisher.objects.filter(name='Apress')
上面的例子中``
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()
如果不在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):移動到下一個結果集
 
cursor用來接收返回值的方法:
fetchall(self):接收全部的返回結果行.
fetchmany(self,
size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
fetchone(self):返回一條結果行.
scroll(self,
value,
mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一
行移動value條.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM