您好,登錄后才能下訂單哦!
數據庫引擎
pymysql 取而代之 ----推薦
2的話pip install pymysql
3的話 pip3 install pymysql
安裝完成后用pip3 freeze 查看一下安裝的什么版本之類的
MySQLdb python3不支持,也TM很久沒更新了
sudo yum install python-devel mysql-devel
MySQL-python-1.2.5,這才是python2.7.6的mysql接口
https://pypi.python.org/pypi/MySQL-python/1.2.5
import MySQLdb
mysqlclient django1.9推薦,python3.3+支持
sudo yum install python-devel mysql-devel
pip install mysqlclient
MySQL Connector/Python
$ python manage.py makemigrations polls stored as amigration. $ python manage.py sqlmigrate polls 0001 just returns their SQL $ python manage.py check # this checks for any problems in your project without making migrations or touching the database. $ python manage.py migrate apply those changes to the database. 會自動生成主鍵_id
python manage.py shell
>>> from books.models import Publisher >>> p1 = Publisher(name='Apress', address='....) >>> p1.save() >>> publisher_list = Publisher.objects.all() >>> publisher_list [<Publisher: Publisher object>]
`` objects.create()`` 一步完成對象的創建與存儲至數據庫,就不需要save
>>> p1 = Publisher.objects.create(name='Apress', ... address='2855 Telegraph Avenue',..............
Publisher 對象添加一個方法 __unicode__() 。
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) def __unicode__(self): return self.name
>>> from books.models import Publisher >>> publisher_list = Publisher.objects.all() >>> publisher_list [<Publisher: Apress>, <Publisher: O'Reilly>]
因為 Publisher 模型有一個自動增加的主鍵 id ,所以第一次調用 save() 還多做了一件事: 計算這個主鍵的值并把它賦值給這個對象實例:
>>> p.id 52 # this will differ based on your own data
接下來再調用 save() 將不會創建新的記錄,而只是修改記錄內容(也就是 執行 UPDATE SQL語句,而不是INSERT 語句):
>>> p.name = 'Apress Publishing' >>> p.save()
注意,并不是只更新修改過的那個字段,所有的字段都會被更新。 這個操作有可能引起競態條件
取出所有記錄:
>>> Publisher.objects.all() [<Publisher: Apress>, <Publisher: O'Reilly>]
數據過濾
filter()返回集合
你可以傳遞多個參數到 filter() 來縮小選取范圍:
>>> Publisher.objects.filter(country="U.S.A.", state_province="CA") [<Publisher: Apress>]
在 name 和 contains 之間有雙下劃線。contains部分會被Django翻譯成LIKE語句:
>>> Publisher.objects.filter(name__contains="press") [<Publisher: Apress>]
注意,SQL缺省的 = 操作符是精確匹配的
SELECT id, name, address, city, state_province, country, website FROM books_publisher WHERE name LIKE '%press%';
其他的一些查找類型有:icontains(大小寫無關的LIKE),startswith和endswith, 還有range(SQLBETWEEN查詢)。 附錄C詳細描述了所有的查找類型。
`` get()`` 返回單個的對象
>>> Publisher.objects.get(name="Apress") <Publisher: Apress>
如果結果是多個對象,會導致拋出異常,如果查詢沒有返回結果也會拋出異常:
DoesNotExist: Publisher matching query does not exist.
Publisher.DoesNotExist 在你的應用中,你可以捕獲并處理這個異常,像這樣:
try: p = Publisher.objects.get(name='Apress') except Publisher.DoesNotExist: print "Apress isn't in the database yet." else: print "Apress is in the database."
有序返回查詢結果
如果需要以多個字段為標準進行排序(第二個字段會在第一個字段的值相同的情況下被使用到),減號 -
表示逆向排序:
>>> Publisher.objects.order_by("-state_province", "address") [<Publisher: Apress>, <Publisher: O'Reilly>]
Django讓你可以指定模型的缺省排序方式: class Meta,內嵌類。
class Publisher(models.Model): name = models.CharField(max_length=30) def __unicode__(self): return self.name **class Meta:** **ordering = ['name']**
“鏈式”的形式:
>>> Publisher.objects.filter(country="U.S.A.").order_by("-name") [<Publisher: O'Reilly>, <Publisher: Apress>]
限制返回的數據
取出固定數目的記錄,剪語句,不支持負索引,但可逆序查詢
>>> Publisher.objects.order_by('-name')[0:2]
更新多個對象
更新一條記錄
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
更新多條記錄。
>>> Publisher.objects.all().update(country='USA') # 所有Publisher的country字段 2 # 表示受影響的記錄條數
注:save()方法,這個方法會更新一行里的所有列。 而某些情況下,我們只需要更新行里的某幾列。
刪除數據庫中的對象只需調用該對象的delete()方法即可:
>>> p = Publisher.objects.get(name="O'Reilly") >>> p.delete() >>> Publisher.objects.all() [<Publisher: Apress Publishing>]
>>> Publisher.objects.filter(country='USA').delete() # 刪除部分 >>> Publisher.objects.all().delete() # 刪除所有
為了預防誤刪除掉某一個表內的所有數據,Django要求在刪除表內所有數據時顯示使用all()。 否則報錯
>>> Publisher.objects.delete() # 必需加all() Traceback (most recent call last): File "<console>", line 1, in <module> AttributeError: 'Manager' object has no attribute 'delete'
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。