当前位置: 首页 > news >正文

常见网站颜色搭配做良心网站

常见网站颜色搭配,做良心网站,网页设计与制作过程中遇到的问题,北京市住房和城乡建设部网站官网本文為 Python SQLAlchemy ORM 一系列教學文#xff1a; 刪除 學會如何查詢之後#xff0c;就能夠進行後續的刪除、更新等操作。 同樣地#xff0c;以幾個範例做為學習的捷徑。 123456789 user_1 User(user1, username1, password_1)user_2 User(user2, username2, passw… 本文為 Python SQLAlchemy ORM 一系列教學文 刪除 學會如何查詢之後就能夠進行後續的刪除、更新等操作。 同樣地以幾個範例做為學習的捷徑。 123456789 user_1 User(user1, username1, password_1)user_2 User(user2, username2, password_2)session.add(user_1)session.add(user_2)affected_rows session.query(User).filter_by(id1).delete()print(Affected rows:, affected_rows)if session.query(User).filter_by(id1).count() 0: print(id 1 not found) 上述的範例中將 id 為 1 的 user 查詢出來後直接呼叫 delete() 方法進行刪除。 呼叫 delete() 後會回傳刪除成功的資料筆數。 更新 事實上更新也只需要呼叫 update() 並提供欄位名稱與欄位值的 dictionary 做為參數即可。 123456789 user_1 User(user1, username1, password_1)user_2 User(user2, username2, password_2)session.add(user_1)session.add(user_2)affected_rows session.query(User).filter_by(id1).update({id:3, username: sqlalchemy})print(Affected rows:, affected_rows)for r in session.query(User): print(r.id, r.username) 表格關聯(Relationship) SQLAlchemy ORM 最大的特點就是能夠透過 Python 類別間關聯的建立實作資料庫表格間的關聯能夠讓程式開發者很方便的取得相關聯的資料。 而關聯的種類有 One to ManyMany to oneOne to oneMany to Many分別代表一筆資料與另一個表格的資料間的關係。 如果有興趣了解的人可以詳閱 Basic Relationship Patterns 。 接下來同樣用一個範例了解 SQLAlchemy ORM 的表格關聯。範例中除了原先已經定義過的 User 類別之外還會再多定義一個 Address 類別兩者間的關係為一對多代表一個 user 允許有多個 address 。 一對多關聯 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 # -*- coding: utf-8 -*-import hashlibimport sqlalchemy.ormfrom sqlalchemy import create_enginefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import ForeignKeyfrom sqlalchemy.orm import relationship, backreffrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import descfrom sqlalchemy.orm import aliasedfrom sqlalchemy import funcBase declarative_base()class User(Base): __tablename__ user id Column(Integer, primary_keyTrue) name Column(String) username Column(String) password Column(String) def __init__(self, name, username, password): self.name name self.username username self.password hashlib.sha1(password).hexdigest() def __repr__(self): return User({},{}, {}).format( self.name, self.username, self.password )class Address(Base): __tablename__ user_address id Column(Integer, primary_keyTrue) address Column(String, nullableFalse) user_id Column(Integer, ForeignKey(user.id)) user relationship(User, backrefbackref(address, order_byid)) def __init__(self, address): self.address address def __repr__(self): return Address({}).format(self.address)if __name__ __main__: engine create_engine(sqlite:///:memory:, echoTrue) Base.metadata.create_all(engine) Session sessionmaker(bindengine) session Session() user_1 User(user1, username1, password_1.encode(utf-8)) user_2 User(user2, username2, password_2.encode(utf-8)) user_1.address [Address(臺灣凱達格蘭大道)] user_2.address [Address(美國紐約時代廣場), Address(美國華盛頓DC)] session.add(user_1) session.add(user_2) for r in session.query(Address): print(r.id, r.address, r.user_id) for r in session.query(User): for a in r.address: print(r.username, living at, a.address) 範例說明 首先看到第 7, 8 行 import 所需的模組( ForeignKey, relationship, backref ) 。 然後在第 38 - 51 行的部份進行 Address 類別的定義其中第 44 行定義了一個關聯至 user.id 的 Foreign Key宣告了它是一個指到 user.id 的 Foreign Key。 並且在第 45 行以 relationship() 方法定義類別 Address 與類別 User 間有一個參照的關聯存在。 SQLAlchemy ORM 就會依照 backref(address, order_byid) 所定義的關聯將 User 與 Address 之間以 address 屬性關聯起來。 若第 45 行單單只有 relationship(User) 就代表只是單向的從 Address 到 User 之間的關聯存在(Address → User)但由於我們希望查詢 User 時也能夠得知 User 到那些 Address 的資料因此就得從 User 關聯回 Address (User → Address)形成一種雙向的關係(User ↔ Address) 在 SQLAlchemy 中就稱這種雙向的關係為 backref 。因此在第 45 行可以看到 backref(address, order_byid)其實就是代表若要從 User 關聯回 Address 就得存取 User 的 address 屬性。 backref – indicates the string name of a property to be placed on therelated mapper’s class that will handle this relationship in the otherdirection. The other property will be created automatically when themappers are configured. Can also be passed as a backref() object tocontrol the configuration of the new relationship. 第 60, 61 行分別指定了 user_1 , user_2 的地址然後在第 64, 65 行將這些資料一併新增到資料庫內(包含 Address 的部份 SQLAlchemy 會自動處理)。 第 70 行查詢資料庫內的所有 user 資料並且透過 relationship(User, backrefbackref(address, order_byid)) 中所指明的 backref(address, order_byid)以 address 屬性取得與 User 有關聯的 Address 相關資料。 最後由於 User 與 Address 之間是一對多的關係因此需要在第 71 行以一個迴圈將各自的 Address 實例一一取出。 一對一關聯 預設的關聯就是一對多因此我們可以看到前述的範例是以 list 的進行新增如 user_2.address [Address(美國紐約時代廣場), Address(美國華盛頓DC)]。 可是有些時候我們會限制資料間只能有一對一的關係存在此時就需要在 backref() 中加上 uselistFalse 做為參數以表明一對一的關係。 例如前述範例的第 45 行可變更為 1 backref(address, uselistFalse, order_byid) 那麼在第 62, 63 行就不需再以 list 的形式指定同時在第 71 行也不需要再多一個迴圈將各別的 Address 取出。 多對一關聯 同樣以 User, Address 兩個類別作為例子試想當多個使用者住在同一個地址時就是多對一的情況。 此時前述範例就得稍作變更變成將 Address 的 Foreign Key 移除而改至 User 中並將關係指向 Address。同時我們已不再需要從 Address 雙向關聯回 User 因此在 relationship() 中也不需再指定 backref 。 多對一關聯範例如下 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 # -*- coding: utf-8 -*-import hashlibimport sqlalchemy.ormfrom sqlalchemy import create_enginefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import ForeignKeyfrom sqlalchemy.orm import relationship, backreffrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import descfrom sqlalchemy.orm import aliasedfrom sqlalchemy import funcBase declarative_base()class User(Base): __tablename__ user id Column(Integer, primary_keyTrue) name Column(String) username Column(String) password Column(String) address_id Column(Integer, ForeignKey(user_address.id)) address relationship(Address) def __init__(self, name, username, password): self.name name self.username username self.password hashlib.sha1(password).hexdigest() def __repr__(self): return User({},{}, {}).format( self.name, self.username, self.password )class Address(Base): __tablename__ user_address id Column(Integer, primary_keyTrue) address Column(String, nullableFalse) def __init__(self, address): self.address address def __repr__(self): return Address({}).format(self.address)if __name__ __main__: engine create_engine(sqlite:///:memory:, echoTrue) Base.metadata.create_all(engine) Session sessionmaker(bindengine) session Session() user_1 User(user1, username1, password_1.encode(utf-8)) user_2 User(user2, username2, password_2.encode(utf-8)) address_1 Address(臺灣凱達格蘭大道) user_1.address address_1 user_2.address address_1 session.add(user_1) session.add(user_2) for r in session.query(User): print(r.username, living at, r.address.address) print(Address_id:, r.address_id) 多對多關聯 第 4 種關聯的形式為多對多關聯先前提到一對一、一對多、多對一的關聯都是屬於直接形式的 A ↔ B 型然而 SQLAlchemy 的多對多做法是用一個中介的 association table 來多對多映對就成為一種 A ↔ association table ↔ B 的間接關聯形式。 接下來同樣用一個範例說明 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 # -*- coding: utf-8 -*-import hashlibimport sqlalchemy.ormfrom sqlalchemy import create_enginefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import ForeignKeyfrom sqlalchemy.orm import relationship, backreffrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import descfrom sqlalchemy.orm import aliasedfrom sqlalchemy import funcfrom sqlalchemy import TableBase declarative_base()association_table Table( association, Base.metadata, Column(table_a_id, Integer, ForeignKey(table_a.id)), Column(table_b_id, Integer, ForeignKey(table_b.id)))class A(Base): __tablename__ table_a id Column(Integer, primary_keyTrue) children relationship(B, secondaryassociation_table)class B(Base): __tablename__ table_b id Column(Integer, primary_keyTrue)if __name__ __main__: engine create_engine(sqlite:///:memory:) Base.metadata.create_all(engine) Session sessionmaker(bindengine) session Session() b_list [B(), B(), B()] a_1 A() a_2 A() a_1.children b_list a_2.children b_list session.add(a_1) session.add(a_2) session.commit() for a in session.query(A): print(A:, a.id, has relationship with) for b in a.children: print(\tB:, b.id) 以下是執行結果 12345678 A: 1 has relationship with B: 1 B: 2 B: 3A: 2 has relationship with B: 1 B: 2 B: 3 如果有將 sessionmaker() 的 echoTrue 選項打開的話就可以發現 SQLAlchemy 將 A 與 B 的對應 id 存至 association 的訊息。 如下所示 12 2013-09-01 11:46:20,862 INFO sqlalchemy.engine.base.Engine INSERT INTO association (table_a_id, table_b_id) VALUES (?, ?)2013-09-02 11:46:20,862 INFO sqlalchemy.engine.base.Engine ((1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)) 範例說明 第 17 行定義了一個 association table 用來做為多對多的間接映射的資料表格Table() 會用 Metadata 來關聯到 declarative base class 所以 ForeignKey() 就可以分別建立連結到 table_a , table_b 。 第 25 - 33 行定義了 2 個類別 A, B其中第 28 行以 relationship(B, secondaryassociation_table) 指明與 B 之間有關聯存在並且以 secondaryassociation_table 指明透過 association_table 建立多對多的關係。 第 43 - 50 行則是建立多對多的資料。 最後在第 52 - 55 行將資料庫內的結果列印出來。 值得注意的是在範例中並沒有建立雙向的關係如果要查詢 B 時也能夠得知與 A 的關聯就得在 A 類別的 relationship() 加上 backrefbackref(children) 指明雙向關係如此一來 B 就可以透過存取 children 屬性取得相關聯的 A 。 多對多關聯的刪除 在多對多的關聯下若刪除一筆資料並不需要手動更新 association table 內的資料SQLAlchemy 會自動進行更新。 除了多對多的資料關聯是自動 cascade 刪除之外其他的關聯就得自行在 relationship() 指明使用 cascade 刪除例如 1 addresses relationship(Address, backrefuser, cascadeall, delete, delete-orphan) 詳見 Configuring delete/delete-orphan Cascade 結語 至此已解說完大部份的 SQLAlchemy ORM 的功能。剩下的功能就得靠各位自行探索囉 转载于:https://www.cnblogs.com/mosson/p/6257181.html
http://www.pierceye.com/news/940984/

相关文章:

  • 互联网做网站怎么赚钱WordPress副标题不显示
  • 好的网站域名网站运营推广怎做
  • 巴适网站建设wordpress上传与安装包
  • 网站备案不关站wordpress网
  • 中国佛山手机网站建设十大互联网公司排名
  • 手把手指导做网站wordpress 熊掌号插件
  • 宁波网站建设方案报价湖州企业做网站
  • 优化 导航网站百度官网网站首页
  • 各大网站大全河北网站建设seo优化制作设计
  • 做照片的网站前端开发和后端开发
  • 谁能低价做网站支付接口泰州企业自助建站系统
  • 徐州 网站建设辽阳建设网站
  • PHP MySQL 网站开发实例单页应用网站
  • 制作网站的步骤关于企业网站建设的相关思考
  • 统计局网站建设情况ppt设计网站
  • 中石化第四建设公司 网站哪个软件可以看街道实景
  • 郑州做网站哪个平台好全国网站备案
  • 个人网站空间申请html5 网站开发 适配
  • 建站行业如何快速成第一单js制作网页游戏
  • 建立网站后怎么维护做网站自己租服务器还是网络公司
  • 建网站赚钱wordpress 公众号主题
  • 亚马逊网站建设的意义海西高端网站建设
  • 建设静态网站淘宝客怎么建设网站
  • wordpress网站外包浙江省建设厅新网站人员无法查询
  • 广州天与地网站建设石家庄快速建站公司
  • 汕头投资建设总公司网站专做PPP项目网站
  • 双语教学示范课程建设项目网站建设通网站上线
  • 电子商务网站域名注册要求南京电商设计
  • 网站左侧导航设计国内免费服务器地址
  • 怎样上网站dns解析不了图片墙网站源码