跳過到頁腳內容
PYTHON 幫助

Grakn Python(開發人員指南的工作原理)

在今日的編程世界,資料庫正在不斷演進,以應對新應用程式的需求。 雖然傳統的關聯式資料庫仍在使用,但如今我們有像物件關聯映射 (ORM) 這樣的進步技術,允許開發者使用高層級的程式設計抽象來與資料庫互動,而不僅僅依賴於 SQL。 這種方法簡化了資料管理並促進了更清晰的代碼組織。 此外,NoSQL 資料庫作為處理非結構化數據的有用工具出現,尤其是在大數據應用程式和實時分析中。

雲原生資料庫也正在產生重大影響,提供可擴展、可靠且可管理的服務,減少了維護底層基礎架構的負擔。 此外,NewSQL 和圖形資料庫結合了 SQL 和 NoSQL 的優勢,提供了關聯資料庫的可靠性和 NoSQL 的靈活性。 這種結合使它們適用於許多現代應用程式。 通過將這些不同類型的資料庫與創新的程式設計範式整合,我們可以創建符合當今以數據為中心需求的可擴展和適應性的解決方案。 Grakn(現已知為 TypeDB)通過支持管理和查詢知識圖譜,體現了這一趨勢。在本文中,我們將探索 Grakn(TypeDB)及其與 IronPDF 的整合,這是程序生成和操作 PDF 的重要工具。

什麼是 Grakn?

Grakn(現TypeDB),由 Grakn 世實驗室創建,是一個為管理和分析複雜數據網路而設計的知識圖譜資料庫。 它在建模現有數據集中的複雜關係方面表現出色,並提供強大的推理能力來處理存儲的數據。 Grakn 的查詢語言 Graql 允許精確的數據操作和查詢,能夠開發能從複雜數據集中提取有價值見解的智能系統。 通過利用 Grakn 的核心特性,組織可以以強大和智能的知識表徵來管理數據結構。

Grakn Python(如何運作:開發人員指南):圖 1 - TypeDB 網頁

Graql,Grakn 的查詢語言,是專為有效地與 Grakn 知識圖模型互動而設計的,允許詳細和細緻的數據轉換。 由於其水平擴展能力和處理大型數據集的能力,TypeDB 非常適合金融、醫療、藥物發現和網絡安全等領域,其中了解和管理複雜的圖結構至關重要。

在 Python 中安裝及配置 Grakn

安裝 Grakn

對於有興趣使用 Grakn(TypeDB)的 Python 開發者,安裝 typedb-driver 庫至關重要。 這位官方客戶端促進了與 TypeDB 的互動。 請使用以下 pip 命令來安裝此庫:

pip install typedb-driver
pip install typedb-driver
SHELL

設置 TypeDB 伺服器

在編寫代碼之前,請確保您的 TypeDB 伺服器已啟動並運行。 按照 TypeDB 网站提供的操作系統安裝和設置說明。 安裝完成後,您可以使用以下命令啟動 TypeDB 伺服器:

./typedb server
./typedb server
SHELL

在 Python 中使用 Grakn

與 TypeDB 互動的 Python 代碼

此部分展示了如何與 TypeDB 伺服器建立連接、設置資料庫架構和執行基本操作,如插入和檢索數據。

創建資料庫結構

在以下代碼塊中,我們通過創建一個名為 person 的類型來定義資料庫結構,該類型有兩個屬性:nameage。 我們以 SCHEMA 模式開啟一個會話,以啟用結構修改。 這是架構如何被定義和提交的:

from typedb.driver import TypeDB, SessionType, TransactionType

# Connect to TypeDB server
client = TypeDB.core_driver("localhost:1729")

# Create a database (if not already created)
database_name = "example_db"
if not client.databases().contains(database_name):
    client.databases().create(database_name)

with client.session(database_name, SessionType.SCHEMA) as session:
    with session.transaction(TransactionType.WRITE) as transaction:
        transaction.query().define("""
        define
        person sub entity, owns name, owns age;
        name sub attribute, value string;
        age sub attribute, value long;
        """)
        transaction.commit()
from typedb.driver import TypeDB, SessionType, TransactionType

# Connect to TypeDB server
client = TypeDB.core_driver("localhost:1729")

# Create a database (if not already created)
database_name = "example_db"
if not client.databases().contains(database_name):
    client.databases().create(database_name)

with client.session(database_name, SessionType.SCHEMA) as session:
    with session.transaction(TransactionType.WRITE) as transaction:
        transaction.query().define("""
        define
        person sub entity, owns name, owns age;
        name sub attribute, value string;
        age sub attribute, value long;
        """)
        transaction.commit()
PYTHON

插入數據

在建立架構後,腳本將數據插入資料庫。 我們以 DATA 模式開啟一個會話,適合數據操作,並執行插入查詢以添加一個名為 "Alice" 且年齡為 30 的新 person 實體:

# Insert data into the database
with client.session(database_name, SessionType.DATA) as session:
    with session.transaction(TransactionType.WRITE) as transaction:
        # Create a person entity
        transaction.query().insert("""
        insert $p isa person, has name "Alice", has age 30;
        """)
        transaction.commit()
# Insert data into the database
with client.session(database_name, SessionType.DATA) as session:
    with session.transaction(TransactionType.WRITE) as transaction:
        # Create a person entity
        transaction.query().insert("""
        insert $p isa person, has name "Alice", has age 30;
        """)
        transaction.commit()
PYTHON

查詢數據

最後,我們通過查詢名為 "Alice" 的實體來從資料庫中檢索信息。我們以 DATA 模式開啟一個新會話,並使用 TransactionType.READ 開啟讀取交易。 結果被處理以提取並顯示姓名和年齡:

# Query the data from the database
with client.session(database_name, SessionType.DATA) as session:
    with session.transaction(TransactionType.READ) as transaction:
        # Query entities where the person has the name 'Alice'
        results = transaction.query().match("""
        match 
        $p isa person, has name "Alice";
        $p has name $n, has age $a;
        get;
        """)
        for result in results:
            person_name = result.get("n").get_value()
            person_age = result.get("a").get_value()
            print(f"Person Name: {person_name}, Age: {person_age}")
# Query the data from the database
with client.session(database_name, SessionType.DATA) as session:
    with session.transaction(TransactionType.READ) as transaction:
        # Query entities where the person has the name 'Alice'
        results = transaction.query().match("""
        match 
        $p isa person, has name "Alice";
        $p has name $n, has age $a;
        get;
        """)
        for result in results:
            person_name = result.get("n").get_value()
            person_age = result.get("a").get_value()
            print(f"Person Name: {person_name}, Age: {person_age}")
PYTHON

輸出

Grakn Python(如何運作:開發人員指南):圖 2 - 從查詢資料庫的控制台輸出

關閉客戶端連接

要正確釋放資源並防止與 TypeDB 伺服器的進一步互動,請使用 client.close() 關閉客戶端連接:

# Close the client connection
client.close()
# Close the client connection
client.close()
PYTHON

介紹 IronPDF

Grakn Python(如何運作:開發人員指南):圖 3 - IronPDF for Python 網頁

IronPDF for Python 是一個功能強大的庫,用於程序生成和操作 PDF 文件。 它提供了從 HTML 創建 PDF、合併 PDF 文件及批註現有 PDF 文檔的綜合功能。 IronPDF 還可以將 HTML 或網頁內容轉換為高品質的 PDF,使其成為生成報告、發票和其他固定版面文件的理想選擇。

該庫提供了包括內容提取、文檔加密和頁面佈局自定義在內的高級功能。 通過將 IronPDF 集成到 Python 應用中,開發者可以自動化文檔生成工作流並提升 PDF 處理的整體能力。

安裝 IronPDF 庫

要在 Python 中啟用 IronPDF 功能,請使用 pip 安裝該庫:

pip install ironpdf
pip install ironpdf
SHELL

Grakn TypeDB 與 IronPDF 的整合

通過在 Python 環境中結合 TypeDB 和 IronPDF,開發者可以高效地生成和管理以 Grakn(TypeDB)數據庫中的複雜結構數據為基礎的 PDF 文檔。 以下是一個整合例子:

from typedb.driver import TypeDB, SessionType, TransactionType
from ironpdf import *
import warnings

# Suppress potential warnings
warnings.filterwarnings('ignore')

# Replace with your own license key
License.LicenseKey = "YOUR LICENSE KEY GOES HERE"

# Initialize data list
data = []

# Connect to TypeDB server
client = TypeDB.core_driver("localhost:1729")

# Query the data from the database
with client.session(database_name, SessionType.DATA) as session:
    with session.transaction(TransactionType.READ) as transaction:
        # Fetch details of persons named 'Alice'
        results = transaction.query().match("""
        match 
        $p isa person, has name "Alice";
        $p has name $n, has age $a;
        get;
        """)
        for result in results:
            person_name = result.get("n").get_value()
            person_age = result.get("a").get_value()
            data.append({"name": person_name, "age": person_age})

# Close the client connection
client.close()

# Create a PDF from HTML content
html_to_pdf = ChromePdfRenderer()
content = "<h1>Person Report</h1>"
for item in data:
    content += f"<p>Name: {item['name']}, Age: {item['age']}</p>"

# Render the HTML content as a PDF
pdf_document = html_to_pdf.RenderHtmlAsPdf(content)

# Save the PDF to a file
pdf_document.SaveAs("output.pdf")
from typedb.driver import TypeDB, SessionType, TransactionType
from ironpdf import *
import warnings

# Suppress potential warnings
warnings.filterwarnings('ignore')

# Replace with your own license key
License.LicenseKey = "YOUR LICENSE KEY GOES HERE"

# Initialize data list
data = []

# Connect to TypeDB server
client = TypeDB.core_driver("localhost:1729")

# Query the data from the database
with client.session(database_name, SessionType.DATA) as session:
    with session.transaction(TransactionType.READ) as transaction:
        # Fetch details of persons named 'Alice'
        results = transaction.query().match("""
        match 
        $p isa person, has name "Alice";
        $p has name $n, has age $a;
        get;
        """)
        for result in results:
            person_name = result.get("n").get_value()
            person_age = result.get("a").get_value()
            data.append({"name": person_name, "age": person_age})

# Close the client connection
client.close()

# Create a PDF from HTML content
html_to_pdf = ChromePdfRenderer()
content = "<h1>Person Report</h1>"
for item in data:
    content += f"<p>Name: {item['name']}, Age: {item['age']}</p>"

# Render the HTML content as a PDF
pdf_document = html_to_pdf.RenderHtmlAsPdf(content)

# Save the PDF to a file
pdf_document.SaveAs("output.pdf")
PYTHON

這段代碼演示了在 Python 中使用 TypeDB 和 IronPDF 從 TypeDB 資料庫中提取數據並生成 PDF 報告。 它連接到本地 TypeDB 伺服器,提取名為 "Alice" 的實體,並檢索其姓名和年齡。 然後將結果用來構建 HTML 內容,該內容通過 IronPDF 的 ChromePdfRenderer 被轉換成 PDF 文件,並保存為 "output.pdf"。

輸出

Grakn Python(如何運作:開發人員指南):圖 4 - 從先前代碼輸出的 PDF

授權

需要授權密鑰才能去除生成的 PDF 上的水印。 您可以在此鏈接註冊免費試用。 請注意,註冊不需要信用卡; 免費試用版本僅需要一個電子郵件地址。

Grakn Python(如何運作:開發人員指南):圖 5 - IronPDF 授權計劃

結論

Grakn(現為 TypeDB)與 IronPDF 的整合作為管理和分析來自 PDF 文檔的大數據量的強大解決方案。 通過 IronPDF 在數據提取和操作方面的能力,並結合 Grakn 在建模複雜關係和推理方面的專長,您可以將非結構化文檔數據轉換為結構化且可查詢的信息。

這種整合簡化了對 PDF 的有價值見解的提取,通過改進的精度增強了其查詢和分析能力。 通過結合 Grakn 的高層數據管理與 IronPDF 的 PDF 處理功能,您可以開發更高效的方式來處理信息,以便做出更好的決策並深入了解複雜數據集。 IronSoftware 還提供多樣的庫,以促進在包括 Windows、Android、macOS、Linux 等多操作系統和平台上的應用開發。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。