chatgpt给的python ORM 模型示例

前言:目前使用了几款ai工具。chatgpt对于代码相关的一些答复,目前暂时是领先的。以下是学习orm(object/ relational mapping)的一个过程。再多个语言中,都有成熟的orm框架。java中的mybatis mybatis.plus等。

语言:python orm(object/ relational mapping)

问题: 我有一个user表。里面包含3个字段,分别为id,name,age。请使用python封装一个orm来操作user表。

ORM的优势和劣势:最大的优势更安全,sql操作更好维护和使用; 最大的劣势,对于一些关联查询实现难度会翻倍,且执行效率会降低。

以下是chatgpt的答复。

好的,下面是一个简单的 Python ORM 框架的实现示例,用于操作 MySQL 数据库中的 user 表。

import pymysql

class DB:
    def __init__(self, host, port, user, password, database):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.database = database

    def connect(self):
        self.conn = pymysql.connect(
            host=self.host,
            port=self.port,
            user=self.user,
            password=self.password,
            database=self.database,
            charset='utf8mb4',
            cursorclass=pymysql.cursors.DictCursor
        )

    def close(self):
        self.conn.close()

class Model:
    def __init__(self, db):
        self.db = db
        self.conn = db.conn

class User(Model):
    def __init__(self, db):
        super().__init__(db)

    def create_table(self):
        with self.conn.cursor() as cursor:
            sql = '''
                CREATE TABLE IF NOT EXISTS user (
                    id INT(11) NOT NULL AUTO_INCREMENT,
                    name VARCHAR(255) NOT NULL,
                    age INT(11) NOT NULL,
                    PRIMARY KEY (id)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
            '''
            cursor.execute(sql)
        self.conn.commit()

    def insert(self, name, age):
        with self.conn.cursor() as cursor:
            sql = 'INSERT INTO user (name, age) VALUES (%s, %s)'
            cursor.execute(sql, (name, age))
        self.conn.commit()

    def update(self, id, name, age):
        with self.conn.cursor() as cursor:
            sql = 'UPDATE user SET name=%s, age=%s WHERE id=%s'
            cursor.execute(sql, (name, age, id))
        self.conn.commit()

    def delete(self, id):
        with self.conn.cursor() as cursor:
            sql = 'DELETE FROM user WHERE id=%s'
            cursor.execute(sql, (id,))
        self.conn.commit()

    def select_all(self):
        with self.conn.cursor() as cursor:
            sql = 'SELECT * FROM user'
            cursor.execute(sql)
            results = cursor.fetchall()
        return results

    def select_by_id(self, id):
        with self.conn.cursor() as cursor:
            sql = 'SELECT * FROM user WHERE id=%s'
            cursor.execute(sql, (id,))
            result = cursor.fetchone()
        return result

使用示例:

db = DB('localhost', 3306, 'root', 'password', 'test_db')
db.connect()

user = User(db)
user.create_table()

user.insert('Alice', 20)
user.insert('Bob', 25)

users = user.select_all()
print(users)

user.update(1, 'Alice', 21)

user.delete(2)

user_by_id = user.select_by_id(1)
print(user_by_id)

db.close()

这个 ORM 框架使用了 Python 的 pymysql 库来操作 MySQL 数据库,实现了对 user 表的基本增删改查操作。其中,DB 类用于连接数据库,Model 类用于封装数据库操作,User 类继承自 Model 类,用于操作 user 表。这个 ORM 框架还可以进一步扩展,例如支持多表关联查询、事务处理等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值