前言:目前使用了几款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 框架还可以进一步扩展,例如支持多表关联查询、事务处理等功能。