如何根據列名從SQLAlchemy例項獲取值?


SQLAlchemy 是一個用於 Python 程式語言的 SQL 工具包和物件關係對映 (ORM) 系統。它提供了一套完整的知名企業級永續性模式,用於 SQL 中的資料操作。開發人員經常尋求使用的一項功能是使用列名訪問 SQLAlchemy 例項中的值。此強大的技術可以簡化資料庫操作並提高程式碼可讀性。本文將指導您完成在 Python 程式中使用此功能的過程,並展示兩種實用方法。

語法

在深入探討流程之前,讓我們先確定一下我們將在以下程式碼中使用的方法的語法:

# Syntax for accessing a column value by name:
value = SQLAlchemy_instance.column_name

演算法

根據列名從 SQLAlchemy 例項獲取值的逐步過程如下:

  • 在 Python 中匯入 SQLAlchemy 模組

  • 使用 SQLAlchemy 的宣告式基類定義您的資料庫和表

  • 建立您已定義表的例項

  • 使用上面提供的語法訪問此例項列中的值

方法 1:直接訪問

此方法涉及使用例項直接訪問列的值。這是一種簡單直接的方法,只需透過例項呼叫列名即可獲取列值。

示例

from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

# Define a User model
class User(Base):
   __tablename__ = 'users'

   id = Column(Integer, primary_key=True)
   name = Column(String)

# Create a SQLite database and a "users" table
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)

# Add an instance of User
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name='John Doe')
session.add(new_user)
session.commit()

# Access the name directly
print(new_user.name)

輸出

John Doe

解釋

此方法很簡單——您只需使用例項直接訪問列值。

匯入必要的模組和類:第一步是從 SQLAlchemy 匯入必要的元件。`create_engine` 用於設定資料庫,`Column`、`String` 和 `Integer` 用於定義表的列,`sessionmaker` 用於建立用於新增和提交資料的會話,`declarative_base` 是所有模型的基類。

定義表結構:我們建立一個名為 `User` 的新類,它繼承自 `Base`(`declarative_base` 的例項)。在類中,我們定義了兩列,`id` 和 `name`。

建立引擎和表:我們在記憶體中建立 SQLite 資料庫(`:memory:`)並建立 `Base` 或其子類定義的所有表。然後我們使用引擎建立一個會話。

插入資料:在這裡,我們建立一個新的 `User` 例項並將其新增到會話中。最後,我們提交會話以執行事務。

訪問列值:我們直接訪問 `new_user` 例項的 `name` 列值。

方法 2:使用 `getattr()` 函式

第二種方法利用 Python 的底層 `getattr()` 函式。當列名儲存在變數中並且我們需要動態地獲取值時,此策略非常有用。

示例

from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

# Define a User model
class User(Base):
   __tablename__ = 'users'

   id = Column(Integer, primary_key=True)
   name = Column(String)

# Create a SQLite database and a "users" table
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)

# Add an instance of User
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name='Alice Smith')
session.add(new_user)
session.commit()

# Access the name using getattr
column_name = 'name'
print(getattr(new_user, column_name))

輸出

Alice Smith

解釋

在第二種方法中,我們使用 Python 的內建 `getattr()` 函式來訪問列值。當您事先不知道列名並需要在執行時動態獲取它時,此方法非常方便。

匯入必要的模組和類:第一步是從 SQLAlchemy 匯入必要的元件。`create_engine` 用於設定資料庫,`Column`、`String` 和 `Integer` 用於定義表的列,`sessionmaker` 用於建立用於新增和提交資料的會話,`declarative_base` 是所有模型的基類。

定義表結構:我們建立一個名為 `User` 的新類,它繼承自 `Base`(`declarative_base` 的例項)。在類中,我們定義了兩列,`id` 和 `name`。

建立引擎和表:我們在記憶體中建立 SQLite 資料庫(`:memory:`)並建立 `Base` 或其子類定義的所有表。然後我們使用引擎建立一個會話。

插入資料:在這裡,我們建立一個新的 `User` 例項並將其新增到會話中。最後,我們提交會話以執行事務。

訪問段值:我們不是直接訪問段,而是使用 `getattr()`。我們指定物件和我們要從中獲取值的屬性的名稱。在這種情況下,屬性名稱儲存在 `column_name` 變數中。

結論

SQLAlchemy 是一個靈活而強大的 ORM 工具,它與 Python 結合使用時,提供了廣泛的功能來處理與資料集的一致互動。能夠根據列名從 SQLAlchemy 例項中獲取值顯著增強了可讀性並簡化了資料操作。透過兩種不同但同樣高效的方法來實現這一點——直接訪問列值或利用 `getattr()` 函式——您可以選擇最符合您需求的方法,確保您從 SQLAlchemy 例項中獲得最大價值。隨著我們繼續揭開 SQLAlchemy 功能的許多層面,很明顯它在管理和導航我們 Python 中的資料庫相關操作中變得多麼不可或缺。

更新於:2023年7月27日

2K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告