国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SQLAlchemy

stonezhu / 1560人閱讀

摘要:首先安裝包數據庫的默認編碼為,修改數據表的默認編碼是的一個基本操作,這是需要預先掌握的。生成測試數據接下來創建個課程作者,也就是個類的實例,每個作者對應兩個課程,共個類實例。

首先安裝包
sudo pip3 install sqlalchemy

數據庫的默認編碼為 latin1,修改數據表的默認編碼是 MySQL 的一個基本操作,這是需要預先掌握的。不過學習本課程時并不需要這么做,在創建數據庫的同時添加 CHARACTER SET = UTF8 指定編碼格式即可。我們要創建課程相關的映射類以及對應的數據表,現在先創建所需數據庫 study ,編碼格式為 UTF-8 :

mysql -u root
create database study character set = UTF8;
show create database studyG

使用 SQLAlchemy 連接數據庫需要引擎,創建引擎使用 create_engine 方法:

from sqlalchemy import create_engine

參數字符串說明:數據庫類型+驅動://用戶名:密碼@主機:端口號/數據庫名字?charset=編碼格式 mysql 自帶驅動,密碼未設定,端口號可省略

engine = create_engine("mysql://root@localhost/study?charset=utf8")
創建映射類需要繼承聲明基類,使用 declarative_base :

from sqlalchemy.ext.declarative import declarative_base

創建聲明基類時傳入引擎

Base = declarative_base(engine)

創建映射類須繼承聲明基類。首先創建 user 數據表的映射類,此表存放用戶數據,也就是課程作者的數據:

Column 定義字段,Integer、String 分別為整數和字符串數據類型

from sqlalchemy import Column, Integer, String

class User(Base): # 繼承聲明基類

__tablename__ = "user"  # 設置數據表名字,不可省略
id = Column(Integer, primary_key=True)   # 設置該字段為主鍵
# unique 設置唯一約束,nullable 設置非空約束
name = Column(String(64), unique=True, nullable=False)
email = Column(String(64), unique=True)

# 此特殊方法定義實例的打印樣式
def __repr__(self):
    return "".format(self.name)

一對多關系
現在創建第二個映射類 Course,它對應的數據表 course 存放課程數據。一個課程作者可以創建多個課程,一個課程對應唯一的課程作者,這種關系被稱為一對多或者多對一關系,這是最常用的數據表關系類型:

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref

class Course(Base):

__tablename__ = "course"
id = Column(Integer, primary_key=True)
name = Column(String(64))
# ForeignKey 設置外鍵關聯,第一個參數為字符串,user 為數據表名,id 為字段名
# 第二個參數 ondelete 設置刪除 User 實例后對關聯的 Course 實例的處理規則
# "CASCADE" 表示級聯刪除,刪除用戶實例后,對應的課程實例也會被連帶刪除
user_id = Column(Integer, ForeignKey("user.id", ondelete="CASCADE"))
# relationship 設置查詢接口,以便后期進行數據庫查詢操作
# 第一個參數為位置參數,參數值為外鍵關聯的映射類名,數據類型為字符串
# 第二個參數 backref 設置反向查詢接口
# backref 的第一個參數 "course" 為查詢屬性,User 實例使用該屬性可以獲得相關課程實例的列表
# backref 的第二個參數 cascade 如此設置即可實現 Python 語句刪除用戶數據時級聯刪除課程數據
user = relationship("User", 
        backref=backref("course", cascade="all, delete-orphan"))

def __repr__(self):
    return "".format(self.name)
    
    

創建數據表
聲明基類 Base 在創建之后并不會主動連接數據庫,因為它的默認設置為惰性模式。Base 的 metadata 有個 create_all 方法,執行此方法會主動連接數據庫并創建全部數據表,完成之后自動斷開與數據庫的連接:

Base.metadata.create_all()

完整代碼
總結以上內容,寫入 db.py 文件:

File Name:db.py

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref

engine = create_engine("mysql://root@localhost/study?charset=utf8")
Base = declarative_base(engine)

class User(Base):

__tablename__ = "user"  
id = Column(Integer, primary_key=True) 
name = Column(String(64), unique=True, nullable=False)
email = Column(String(64), unique=True)

def __repr__(self):
    return "".format(self.name)

class Course(Base):

__tablename__ = "course"
id = Column(Integer, primary_key=True)
name = Column(String(64))
user_id = Column(Integer, ForeignKey("user.id", ondelete="CASCADE"))
user = relationship("User",
        backref=backref("course", cascade="all, delete-orphan"))

def __repr__(self):
    return "".format(self.name)

if name == "__main__":

# 使用聲明基類的 metadata 對象的 create_all 方法創建數據表:
Base.metadata.create_all()

運行程序
在終端使用 Python 解釋器運行文件,在此之前先安裝一個必要的依賴包 mysqlclient,該依賴包的作用是連接數據庫:

$ sudo pip3 install mysqlclient # 安裝依賴包
$ python3 db.py

測試數據的創建需要用到 Python 的 faker 庫,使用 pip3 安裝先:

sudo pip3 install faker
這是一個用法簡單功能強大的偽造數據的庫,大家可以在命令行交互解釋器 ipython 中進行測試,首先在終端命令行安裝 ipython :

$ sudo pip3 install ipython

完成后終端執行 ipython 命令,即可進入命令行交互解釋器:

In [38]: from faker import Faker # 引入 Faker 類

創建實例,添加參數 "zh-cn" 是為了偽造中文數據 該實例叫做工廠對象,它可以使用各種各樣的方法偽造數據

In [39]: fake = Faker("zh-cn")

In [40]: fake.name() # 偽造姓名
Out[40]: "房明"

In [41]: fake.address() # 偽造地址
Out[41]: "山西省梅市上街董路Q座 238175"

In [42]: fake.email() # 偽造郵箱
Out[42]: "oqiu@rn.net"

In [43]: fake.url() # 偽造 URL
Out[43]: "https://www.yuzhu.cn/"

In [44]: fake.date() # 偽造日期
Out[44]: "2012-07-03"

ession 處理數據
上文已經介紹了使用映射類創建數據表要用聲明基類 Base,那么處理數據用什么呢?要用到 session,它是 sessionmaker 類的實例,該實例實現了 call 方法,本身可以作為函數來執行,返回值就是能夠處理數據的 session:

from sqlalchemy.orm import sessionmaker

從 db.py 文件中引入下列對象備用

from db import Base, engine, User, Course

將 engine 引擎作為參數創建 session 實例

session = sessionmaker(engine)()
當我們創建了 session 實例,就啟動了一個操作 MySQL 數據庫的會話。

生成測試數據
接下來創建 5 個課程作者,也就是 5 個 User 類的實例,每個作者對應兩個課程,共 10 個 Course 類實例。將以下代碼寫入測試數據的 Python 文件中,文件名為 create_data.py :

File Name: create_data.py

from sqlalchemy.orm import sessionmaker
from faker import Faker
from db import Base, engine, User, Course

session = sessionmaker(engine)()
fake = Faker("zh-cn")

def create_users():

for i in range(10):
    # 創建 10 個 User 類實例,偽造 name 和 email
    user = User(name=fake.name(), email=fake.email())
    # 將實例添加到 session 會話中,以備提交到數據庫
    # 注意,此時的 user 對象沒有 id 屬性值
    # 映射類的主鍵字段默認從 1 開始自增,在傳入 session 時自動添加該屬性值
    session.add(user)

def create_courses():

# session 有個 query 方法用來查詢數據,參數為映射類的類名
# all 方法表示查詢全部,這里也可以省略不寫
# user 就是上一個函數 create_users 中的 user 對象
for user in session.query(User).all():
    # 兩次循環,對每個作者創建兩個課程
    for i in range(2):
        # 創建課程實例,name 的值為 8 個隨機漢字
        course = Course(name="".join(fake.words(4)), user_id=user.id)
        session.add(course)

def main():

# 執行兩個創建實例的函數,session 會話內就有了這些實例
create_users()
create_courses()
# 執行 session 的 commit 方法將全部數據提交到對應的數據表中
session.commit()

if name == "__main__":

main()

完成后,可以在終端執行 python3 create_data.py 來創建數據。為了便于查看代碼的執行情況,不這樣做,我們在 ipython 中引入這些函數,依次執行它們來查看細節:

引入相關對象

In [1]: from create_data import User, Course, session, create_users, create_courses

執行創建 User 實例的函數

In [2]: create_users()

session 查詢結果為列表,每個元素就是一個 User 實例

In [3]: session.query(User).all()
Out[3]:
[,
,
,
,
,
,
,
,
,
]

將某個 User 實例賦值給 user 變量

In [4]: user = session.query(User).all()[3]

查看屬性

In [5]: user.name
Out[5]: "邢想"

In [6]: user.id
Out[6]: 4

執行創建 Course 實例的函數

In [7]: create_courses()

查看前 4 個 Course 實例的 name 屬性

In [8]: for course in session.query(Course)[:4]:
...: print(course.name)
...:
開發中文電子新聞
怎么發布結果詳細
你的只要非常如果
次數通過評論等級

User 實例的 course 屬性為查詢接口,通過 relationship 設置 屬性值為列表,里面是兩個課程實例

In [9]: user.course
Out[9]: [, ]

將某個課程實例賦值給 course 變量

In [10]: course = session.query(Course)[12]

課程實例的 user 屬性為查詢接口,通過 relationship 設置

In [11]: course.user
Out[11]:

將全部實例提交到對應的數據表

In [12]: session.commit()

**接下來我們在 ipython 中刪除 user 實例,驗證級聯刪除功能是否生效:

In [13]: session.delete(user)

In [14]: session.commit()**

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44006.html

相關文章

  • 通過demo學習OpenStack開發所需的基礎知識 -- 數據庫(1)

    摘要:另外,項目在單元測試中使用的是的內存數據庫,這樣開發者運行單元測試的時候不需要安裝和配置復雜的數據庫,只要安裝好就可以了。而且,數據庫是保存在內存中的,會提高單元測試的速度。是實現層的基礎。項目一般會使用數據庫來運行單元測試。 OpenStack中的關系型數據庫應用 OpenStack中的數據庫應用主要是關系型數據庫,主要使用的是MySQL數據庫。當然也有一些NoSQL的應用,比如Ce...

    warnerwu 評論0 收藏0
  • 深入理解flask框架(3):config與extension

    摘要:中的配置,都是通過來控制那么究竟是什么再來看函數而是什么再轉向看的源碼,可以看到類繼承于字典也就是說的就是一個特殊的字典,用于保存配置項。 config flask中的配置,都是通過config來控制那么config究竟是什么? self.config = self.make_config(instance_relative_config) 再來看make_config函數: def ...

    wmui 評論0 收藏0
  • Flask-SQLAlchemy 學習總結

    摘要:初始化和配置對象關系映射。的則需要在中聲明。例如配置信息中指出是可以綁定多個數據庫引擎。是通過解決一對多的關系。將會返回學院學生人數將會返回學生的學院信息的類實例。處理關系對象查詢中有詳細的說明。 初始化和配置 ORM(Object Relational Mapper) 對象關系映射。指將面對對象得方法映射到數據庫中的關系對象中。Flask-SQLAlchemy是一個Flask擴展,能...

    whataa 評論0 收藏0
  • flask筆記:是flask.ext.sqlalchemy還是flask_sqlalchemy

    摘要:首先出結論,和是一個意思,區別是寫法不同,兼容性不同。是特有的拓展功能,目前,擴展必須支持以及原因擴展導入轉換我們推薦使用擴展的命名空間包。相反,我們現在推薦命名軟件包,而不是現在已棄用的。 最近入門python的flask框架,官方推薦用sqlalchemy庫作為與數據庫交互的工具。這時我在看網絡上一些文章資料時發現一個問題。 這里插個題外話,sqlalchemy和flask_sql...

    DandJ 評論0 收藏0
  • Python-SQLAlchemy:第1節:SQLAlchemy入門

    摘要:下一篇文章第節查詢條件設置是編程語言下的一款開源軟件。提供了工具包及對象關系映射工具,使用許可證發行。在關閉連接時會自動進行事務提交操作。引入多條件查詢時使用。由于上下文函數退出時會自動提交事務,所以無需顯示的調用使新增生效。 下一篇文章:Python-SQLAlchemy:第2節:查詢條件設置 SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對象關系...

    noONE 評論0 收藏0
  • Flask擴展之flask-sqlalchemy(上)

    摘要:查詢記錄在調試或測試模式自動啟用。可以用于顯式禁用原生支持。當使用不合適的指定無編碼的數據庫默認值時,這對于一些數據庫適配器是必須的比如上某些版本的。這對是必要的,它默認移除閑置多于小時的連接。注意如果使用了,自動設定這個值為小時。 flask-sqlalchemy是flask的一個ORM擴展框架,這個擴展在sqlalchemy的進行的擴展,更方便的結合Flask.什么是ORM?其是O...

    KaltZK 評論0 收藏0

發表評論

0條評論

stonezhu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<