一、ORM基本介绍
| ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM。 |
二、实现目标
| 创建一个实例对象,用创建它的类名当做数据表名,用创建它的类属性对应数据表的字段,当对这个实例对象操作时,能够对应MySQL语句 |
如图:

三、代码实现
| class ModelMetaClass(type): |
| |
| def __new__(cls, name, bases, attrs): |
| mappings = dict() |
| for k, v in attrs.items(): |
| |
| if isinstance(v, tuple): |
| mappings[k] = v |
| |
| |
| for k in mappings: |
| attrs.pop(k) |
| |
| attrs["__mappings__"] = mappings |
| attrs["__table__"] = name |
| |
| return type.__new__(cls, name, bases, attrs) |
| |
| |
| class Model(metaclass=ModelMetaClass): |
| |
| |
| |
| |
| |
| def __init__(self, **kwargs): |
| |
| for k, v in kwargs.items(): |
| setattr(self, k, v) |
| |
| def save(self): |
| table_name = self.__table__ |
| field = list() |
| args = list() |
| for k, v in self.__mappings__.items(): |
| field.append(v[0]) |
| arg = getattr(self, k, None) |
| |
| if isinstance(arg, str): |
| args.append("""'{}'""".format(arg)) |
| else: |
| args.append(str(arg)) |
| |
| sql = "insert into {}({}) values ({})".format(table_name, ",".join(field), ",".join(args)) |
| print(f"SQL语句: {sql}") |
| |
| |
| class User(Model): |
| uid = ("uid", "int unsigned") |
| name = ("username", "varchar(30)") |
| email = ("email", "varchar(30)") |
| password = ("password", "varchar(30)") |
| |
| |
| u = User(uid=12345, name="Michael", email="test@orm.org", password="my-pwd") |
| u.save() |
| |
代码运行结果:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义