Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pangkalan data rangka kerja ORM dalam Python dalam amalan

Pangkalan data rangka kerja ORM dalam Python dalam amalan

WBOY
WBOYasal
2023-06-10 17:42:092560semak imbas

Dalam beberapa tahun kebelakangan ini, Python telah menjadi bahasa pengaturcaraan yang cekap, mudah digunakan dan fleksibel, dan dalam bidang pembangunan Python, aplikasi rangka kerja ORM Pangkalan Data menjadi semakin biasa. Pangkalan data ialah rangka kerja ORM yang ringkas, intuitif, ringan yang menyokong pelbagai pangkalan data, termasuk tetapi tidak terhad kepada MySQL, PostgreSQL, SQLite dan Microsoft SQL Server. Artikel ini akan memperkenalkan anda kepada rangka kerja Pangkalan Data secara terperinci dan aplikasi khususnya dalam pembangunan Python.

1. Konsep rangka kerja ORM

ORM adalah singkatan kepada Object Relational Mapping, iaitu pemetaan antara jadual pangkalan data relasi dan objek Python, dengan itu membolehkan pembangun untuk Teknologi operasi pernyataan SQL adalah tidak lebih lama diperlukan dalam proses pengaturcaraan Aplikasi rangka kerja ORM dalam Python menyediakan pembangun dengan lebih banyak pilihan dan menjadikan pembangunan program lebih mudah.

2. Rangka kerja pangkalan data

Pangkalan data ialah rangka kerja ORM ringkas yang dibangunkan oleh pembangun Django ORM, Andrew Goodwin pangkalan data, termasuk MySQL, PostgreSQL, SQLite dan Microsoft SQL Server.

  1. Pasang rangka kerja Pangkalan Data

Untuk pemasangan rangka kerja Pangkalan Data, anda boleh menggunakan pip untuk memasangnya Perintahnya adalah seperti berikut:

pip install databases==0.4.*
  1. Sambung ke pangkalan data

Sebelum menggunakan rangka kerja Pangkalan Data untuk pembangunan, anda perlu menyambung ke pangkalan data terlebih dahulu. Parameter yang diperlukan untuk menyambung ke pangkalan data termasuk jenis pangkalan data, nama hos, nama pangkalan data, nama pengguna dan kata laluan, dsb. Dalam perkembangan ini, kami cuba menyambung ke pangkalan data MySQL Kodnya adalah seperti berikut:

import databases

DATABASE_URL = "mysql://user:password@hostname/database_name"

database = databases.Database(DATABASE_URL)

Di sini, QAQsaaspassword ialah kata laluan untuk menyambung ke pangkalan data, askdnsadn312as ialah nama pengguna untuk menyambung ke pangkalan data, dan localhost. ialah nama hos atau alamat IP di mana pangkalan data terletak , my_database ialah nama pangkalan data.

  1. Buat jadual dan lajur

Rangka kerja Pangkalan Data menyokong bahasa ungkapan SQL untuk mencipta pernyataan pertanyaan yang kompleks, membolehkan pembangun mengawal proses pelaksanaan SQL dengan lebih fleksibel. Dalam rangka kerja Pangkalan Data, kita boleh menggunakan kelas Jadual untuk mencipta jadual dan kelas Lajur untuk membuat lajur.

Kod penciptaan jadual adalah seperti berikut:

import sqlalchemy

metadata = sqlalchemy.MetaData()

users = sqlalchemy.Table(
    "users",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("username", sqlalchemy.String),
    sqlalchemy.Column("password", sqlalchemy.String),
    sqlalchemy.Column("email", sqlalchemy.String),
)

Di sini, kami menggunakan objek MetaData dalam SQLAlchemy untuk mencipta empat medan (id, nama pengguna, kata laluan dan e-mel) dengan mentakrifkan jadual pengguna.

  1. Laksanakan pernyataan SQL

Rangka kerja Pangkalan Data juga menyediakan kaedah untuk beroperasi secara langsung menggunakan pernyataan SQL, yang lebih fleksibel. Pelaksanaan pernyataan SQL boleh dicapai melalui kaedah execute() Kodnya adalah seperti berikut:

result = await database.execute(query)

di mana pertanyaan mewakili kod pernyataan SQL, dan hasilnya ialah hasil pelaksanaan akan mengembalikan jenis dict Terdiri daripada senarai, setiap dict mewakili rekod dalam hasil pertanyaan SQL.

5. Gunakan ORM dalam Pangkalan Data

Rangka kerja Pangkalan Data juga menyokong ORM untuk mengendalikan pernyataan SQL, yang lebih mudah untuk pembangun. Kaedah ORM membantu memetakan hubungan objek ke pangkalan data, menjadikan kod lebih mudah dibaca dan diselenggara.

Menggunakan ORM, kami boleh mengendalikan pangkalan data dengan mentakrifkan model Kodnya adalah seperti berikut:

import sqlalchemy

metadata = sqlalchemy.MetaData()

users = sqlalchemy.Table(
    "users",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("username", sqlalchemy.String),
    sqlalchemy.Column("password", sqlalchemy.String),
    sqlalchemy.Column("email", sqlalchemy.String),
)

class UserModel:
    id: int
    username: str
    password: str
    email: str

    __tablename__ = "users"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

Di sini, kami mentakrifkan kelas model UserModel untuk mewakili objek jadual data kami , kita boleh melengkapkan definisi jadual dan lajur dalam SQLAlchemy, supaya ORMnya boleh dipetakan ke pangkalan data, yang mudah, cepat dan mudah diselenggara.

3. Contoh Aplikasi

Di sini, kami mengambil aplikasi blog ringkas sebagai contoh untuk menunjukkan operasi khusus rangka kerja Pangkalan Data.

1 Sambung ke pangkalan data

Maklumat yang diperlukan untuk sambungan pangkalan data juga sangat mudah, seperti yang ditunjukkan dalam kod berikut:

import databases

DATABASE_URL = "mysql://user:password@hostname/database_name"

database = databases.Database(DATABASE_URL)

DATABASE_URL di sini menentukan setiap pautan ke sambung ke parameter MySQL untuk menyambung ke sistem pangkalan data kami.

2. Tentukan model

Dalam contoh blog ini, kita perlu mentakrifkan dua model data Satu ialah model Blog, yang mewakili objek catatan blog adalah seperti berikut:

class Blog:
    id: int
    title: str
    description: str
    content: str

    __tablename__ = "blog"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

Yang lain ialah model Pengguna, yang mewakili objek pengguna Kod yang dijana adalah seperti berikut:

class User:
    id: int
    name: str
    email: str
    password: str

    __tablename__ = "user"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

Begitu juga, kami memetakan ORMnya ke pangkalan data MySQL yang kami sambungkan melalui mudah. takrifan.

3. Cipta jadual

Memandangkan sistem pangkalan data yang kami kendalikan ialah MySQL, kami perlu mencipta jadual yang sepadan adalah seperti berikut:

CREATE TABLE `blog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT NULL,
  `description` varchar(100) DEFAULT NULL,
  `content` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4. Masukkan data

Kami boleh menggunakan ORM untuk memasukkan data dengan sangat mudah Kod yang dijana adalah seperti berikut:

async def create_blog_post(title: str, description: str, content: str):
    query = blog.insert().values(title=title, description=description, content=content)
    return await database.execute(query)

async def create_user(name: str, email: str, password: str):
    query = user.insert().values(name=name, email=email, password=password)
    return await database.execute(query)

Di sini kami menggunakan kaedah insert() untuk melengkapkan operasi memasukkan data, yang sangat penting. boleh dibaca. , untuk memudahkan pembangun mengekalkan kod dengan lebih baik.

5. Data pertanyaan

Rangka kerja Pangkalan Data juga menyokong operasi pertanyaan, seperti yang ditunjukkan dalam kod berikut:

async def get_blog_post(id: int):
    query = blog.select().where(blog.c.id == id)
    return await database.fetch_one(query)

async def get_all_users():
    query = user.select()
    return await database.fetch_all(query)

async def get_users_by_email(email: str):
    query = user.select().where(user.c.email == email)
    return await database.fetch_all(query)

Di sini kami menggunakan kaedah pilih() untuk menyambung syarat untuk mendapatkan peranti terjana yang mengembalikan beberapa pasangan semasa melintasi. Kami juga boleh menapis dan mengisih data dengan menggunakan data pertanyaan.

Ringkasan

Rangka kerja Pangkalan Data ialah rangka kerja ORM yang fleksibel, mudah digunakan dan ringan untuk pembangun Python Ia boleh menyokong pelbagai pangkalan data dengan mudah dan memudahkan pembangun menyimpan, mengendalikan, menapis dan mengisih data, dsb. Artikel ini menunjukkan fleksibiliti dan kemudahan penggunaan rangka kerja Pangkalan Data, daripada menyambung kepada pangkalan data kepada mentakrifkan operasi model, kepada pemasukan data dan operasi pertanyaan, menjadikannya lebih mudah untuk pembangun membangunkan program Python dengan lebih cekap.

Atas ialah kandungan terperinci Pangkalan data rangka kerja ORM dalam Python dalam amalan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn