<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # SQL 表達式語言 > 原文: [http://zetcode.com/db/sqlalchemy/exprlang/](http://zetcode.com/db/sqlalchemy/exprlang/) 在 SQLAlchemy 教程的這一部分中,我們使用 SQLAlchemy 的 SQL 表達式語言。 SQLAlchemy 表達式語言使用 Python 構造表示關系數據庫結構和表達式。 表達式語言通過隱藏 SQL 語言來提高代碼的可維護性,因此不允許混合使用 Python 代碼和 SQL 代碼。 對象關系映射器(ORM)建立在表達式語言之上。 ## 選擇所有行 在第一個示例中,我們使用表達式語言從表中選擇所有行。 `exp_select_all.py` ```py #!/usr/bin/python # -*- coding: utf-8 -*- from sqlalchemy import create_engine, Table, MetaData from sqlalchemy.sql import select eng = create_engine('sqlite:///test.db') with eng.connect() as con: meta = MetaData(eng) cars = Table('Cars', meta, autoload=True) stm = select([cars]) rs = con.execute(stm) print rs.fetchall() ``` 該示例使用`select()`方法從`Cars`表中檢索所有行。 ```py meta = MetaData(eng) cars = Table('Cars', meta, autoload=True) ``` 我們加載`Cars`表的定義。 ```py stm = select([cars]) ``` 使用`select()`方法,我們創建了一條 SQL `SELECT`語句。 該特定表達式從提供的表中選擇所有列和行。 ```py rs = con.execute(stm) ``` 該語句被執行。 ```py print rs.fetchall() ``` 使用`fetchall()`方法,我們將打印所有返回的數據。 ```py $ ./exp_select_all.py [(1, u'Audi', 52642), (2, u'Mercedes', 57127), (3, u'Skoda', 9000), (4, u'Volvo', 29000), (5, u'Bentley', 350000), (6, u'Citroen', 21000), (7, u'Hummer', 41400), (8, u'Volkswagen', 21600)] ``` 這是示例的輸出。 ## 限制所選輸出 在第二個示例中,我們限制從表中檢索的數據。 `exp_select_limit.py` ```py #!/usr/bin/python # -*- coding: utf-8 -*- from sqlalchemy import create_engine, Table, MetaData from sqlalchemy.sql import select eng = create_engine('sqlite:///test.db') with eng.connect() as con: meta = MetaData(eng) cars = Table('Cars', meta, autoload=True) stm = select([cars.c.Name, cars.c.Price]).limit(3) rs = con.execute(stm) print rs.fetchall() ``` 該示例從`Cars`表中打印三行的兩列。 ```py stm = select([cars.c.Name, cars.c.Price]).limit(3) ``` 在方括號之間,我們提供了要顯示的列。 `limit()`方法將結果集限制為三行。 ```py $ ./exp_select_limit.py [(u'Audi', 52642), (u'Mercedes', 57127), (u'Skoda', 9000)] ``` 這是`exp_select_limit.py`程序的輸出。 ## `where()`方法 `where()`方法將`WHERE`子句添加到`select()`方法生成的語句中。 `exp_select_where.py` ```py #!/usr/bin/python # -*- coding: utf-8 -*- from sqlalchemy import create_engine, Table, MetaData from sqlalchemy.sql import select, and_ eng = create_engine('sqlite:///test.db') with eng.connect() as con: meta = MetaData(eng) cars = Table('Cars', meta, autoload=True) stm = select([cars]).where(and_(cars.c.Price > 10000, cars.c.Price < 40000)) rs = con.execute(stm) print rs.fetchall() ``` 該示例選擇價格在 10000 和 40000 之間的所有汽車。 ```py stm = select([cars]).where(and_(cars.c.Price > 10000, cars.c.Price < 40000)) ``` 為了構建預期的 SQL 語句,我們使用`select()`和`where()`方法以及`and_()`運算符。 ```py $ ./exp_select_where.py [(4, u'Volvo', 29000), (6, u'Citroen', 21000), (8, u'Volkswagen', 21600)] ``` 該代碼示例將打印價格在 10000 和 40000 之間的所有汽車。 ## `like()`方法 `like()`方法將`LIKE`子句添加到`select()`方法生成的語句中。 `exp_select_like.py` ```py #!/usr/bin/python # -*- coding: utf-8 -*- from sqlalchemy import create_engine, Table, MetaData from sqlalchemy.sql import select eng = create_engine('sqlite:///test.db') with eng.connect() as con: meta = MetaData(eng) cars = Table('Cars', meta, autoload=True) stm = select([cars]).where(cars.c.Name.like('%en')) rs = con.execute(stm) print rs.fetchall() ``` 通過`like()`方法,我們選擇名稱以'en'結尾的所有汽車。 ```py stm = select([cars]).where(cars.c.Name.like('%en')) ``` `like()`方法應用于列名。 ```py $ ./exp_select_like.py [(6, u'Citroen', 21000), (8, u'Volkswagen', 21600)] ``` 有兩輛汽車的名字以`"en"`結尾。 ## 排序行 `order_by()`方法將`ORDER BY`子句添加到`select()`方法生成的語句中。 `exp_select_order.py` ```py #!/usr/bin/python # -*- coding: utf-8 -*- from sqlalchemy import create_engine, Table, MetaData from sqlalchemy.sql import select, asc eng = create_engine('sqlite:///test.db') with eng.connect() as con: metadata = MetaData(eng) cars = Table('Cars', metadata, autoload=True) s = select([cars]).order_by(asc(cars.c.Name)) rs = con.execute(s) for row in rs: print row['Id'], row['Name'], row['Price'] ``` 該示例打印按汽車名稱排序的所有行。 ```py s = select([cars]).order_by(asc(cars.c.Name)) ``` `order_by()`方法具有`asc()`運算符,該運算符以升序方式進行排序。 ```py $ ./exp_select_order.py 1 Audi 52642 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 2 Mercedes 57127 3 Skoda 9000 8 Volkswagen 21600 4 Volvo 29000 ``` 該示例打印所有行。 這些行按汽車名稱升序排列。 ## `in_()`運算符 `in_()`運算符用于將`IN`子句添加到生成的`SELECT`語句中。 `exp_select_in.py` ```py #!/usr/bin/python # -*- coding: utf-8 -*- from sqlalchemy import create_engine, Table, MetaData, tuple_ from sqlalchemy.sql import select eng = create_engine('sqlite:///test.db') with eng.connect() as con: meta = MetaData(eng) cars = Table('Cars', meta, autoload=True) k = [(2,), (4,), (6,), (8,)] stm = select([cars]).where(tuple_(cars.c.Id).in_(k)) rs = con.execute(stm) for row in rs: print row['Id'], row['Name'], row['Price'] ``` 該示例打印由`in_()`運算符指定的表的四行。 ```py stm = select([cars]).where(tuple_(cars.c.Id).in_(k)) ``` 借助`tuple_()`和`in_()`運算符,我們構建了包含`IN`子句的語句。 ```py $ ./exp_select_in.py 2 Mercedes 57127 4 Volvo 29000 6 Citroen 21000 8 Volkswagen 21600 ``` 這是示例的輸出。 ## 建立表 下一個示例使用表達式語言在內存中創建一個表。 `exp_create_table.py` ```py #!/usr/bin/python # -*- coding: utf-8 -*- from sqlalchemy import (create_engine, Table, Column, Integer, String, MetaData) from sqlalchemy.sql import select eng = create_engine('sqlite:///:memory:') with eng.connect() as con: meta = MetaData(eng) cars = Table('Cars', meta, Column('Id', Integer, primary_key=True), Column('Name', String), Column('Price', Integer) ) cars.create() ins1 = cars.insert().values(Id=1, Name='Audi', Price=52642) con.execute(ins1) ins2 = cars.insert().values(Id=2, Name='Mercedes', Price=57127) con.execute(ins2) ins3 = cars.insert().values(Id=3, Name='Skoda', Price=6000) con.execute(ins3) s = select([cars]) rs = con.execute(s) for row in rs: print row['Id'], row['Name'], row['Price'] ``` 該示例在內存中創建一個新表,將其填充數據,然后在該表上執行`SELECT`語句。 ```py eng = create_engine('sqlite:///:memory:') ``` 創建的表將是 SQLite 的內存表。 ```py meta = MetaData(eng) cars = Table('Cars', meta, Column('Id', Integer, primary_key=True), Column('Name', String), Column('Price', Integer) ) ``` 我們提供表的定義。 ```py cars.create() ``` 該表是使用`create()`方法創建的。 ```py ins1 = cars.insert().values(Id=1, Name='Audi', Price=52642) con.execute(ins1) ``` 使用`insert()`方法,我們將新行插入表中。 ```py s = select([cars]) rs = con.execute(s) for row in rs: print row['Id'], row['Name'], row['Price'] ``` 在最后一步,我們執行`SELECT`語句并將所有返回的數據打印到控制臺。 ```py $ ./exp_create_table.py 1 Audi 52642 2 Mercedes 57127 3 Skoda 6000 ``` 這是示例的輸出。 ## 連接表 在下面的示例中,我們連接了兩個表中的字段。 我們使用`join()`方法。 `exp_join_tables.py` ```py #!/usr/bin/python # -*- coding: utf-8 -*- from sqlalchemy import (create_engine, Table, Column, Integer, String, ForeignKey, MetaData) from sqlalchemy.sql import select eng = create_engine('sqlite:///test.db') with eng.connect() as con: meta = MetaData(eng) authors = Table('Authors', meta, autoload=True) books = Table('Books', meta, autoload=True) stm = select([authors.join(books)]) rs = con.execute(stm) for row in rs: print row['Name'], row['Title'] ``` 該示例在兩個表上執行內連接。 我們得到了作者及其相應的標題。 ```py authors = Table('Authors', meta, autoload=True) books = Table('Books', meta, autoload=True) ``` 這兩個表是從數據庫加載的。 ```py stm = select([authors.join(books)]) ``` 我們使用`JOIN`子句創建`SELECT`語句。 ```py $ ./exp_join_tables.py Jane Austen Emma Leo Tolstoy War and Peace Joseph Heller Catch XII Charles Dickens David Copperfield Joseph Heller Good as Gold Leo Tolstoy Anna Karenia ``` 這是示例的輸出。 在 SQLAlchemy 教程的這一部分中,我們使用了 SQL 表達式語言。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看