91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

py_Django的數據庫操作

發布時間:2020-08-21 02:45:58 來源:網絡 閱讀:391 作者:lc994811089 欄目:數據庫




數據庫引擎



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),startswithendswith, 還有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'







向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雷波县| 阳原县| 天长市| 墨玉县| 商水县| 丹东市| 黄大仙区| 昌平区| 永兴县| 上饶县| 阿合奇县| 巴青县| 澄江县| 清水河县| 凤翔县| 延寿县| 肥城市| 瑞丽市| 香河县| 梅河口市| 古蔺县| 贞丰县| 凤山市| 绍兴市| 安远县| 宿松县| 抚顺市| 盘锦市| 东光县| 南涧| 通江县| 龙门县| 宜昌市| 景德镇市| 玉山县| 宜兰市| 蓬安县| 长岭县| 临泽县| 沂南县| 壤塘县|