ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

chatgpt给的python ORM 模型示例

2026/8/15 17:30:17 拓冰建站 浏览量
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 pymysqlclass DB:def __init__(self, host, port, user, password, database):self.host = hostself.port = portself.user = userself.password = passwordself.database = databasedef 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 = dbself.conn = db.connclass 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 resultsdef 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 框架还可以进一步扩展,例如支持多表关联查询、事务处理等功能。