写一个简单的ORM

栏目: Python · 发布时间: 7年前

内容简介:最近在研究SQLAlchemy源码,自己造个轮子先(当然,SQLAlchemy远比这里复杂)运行结果:

最近在研究SQLAlchemy源码,自己造个轮子先(当然,SQLAlchemy远比这里复杂)

import logging

logging.basicConfig(level=logging.DEBUG)


class Column:
    def __init__(self, type, default=None):
        self.col_name = None
        self.col_type = type
        self.col_default = default

    def __eq__(self, value):
        logging.debug("__eq__ of {} && {}".format(self, value))
        return "{} = {}".format(self.col_name, value)


class Base(type):
    def __new__(cls, *args, **kwargs):
        logging.debug("creating class {}, args {}, kwargs {}".format(
            cls, args, kwargs
        ))

        if len(args) > 2:
            for k, v in args[2].items():
                if k.startswith("_"):
                    continue

                v.col_name = k

        return type.__new__(cls, *args, **kwargs)


class User(metaclass=Base):
    __tablename__ = "user"

    id = Column(int)
    name = Column(str)
    passwd = Column(str)


class Queryable:
    def __init__(self, table):
        self.table = table

    def filter(self, text):
        return "select * from {} where {}".format(
            self.table.__tablename__,
            text,
        )


class Session:
    def query(self, table):
        logging.debug("returning Queryable({})".format(table))
        return Queryable(table)


session = Session()
print(session.query(User).filter(User.id == 1))

运行结果:

jiajun@debian test: python3 orm.py
DEBUG:root:creating class <class '__main__.Base'>, args ('User', (), {'__qualname__': 'User', '__tablename__': 'user', 'id': <__main__.Column object at 0x7f8174b107b8>, 'passwd': <__main__.Column object at 0x7f8174b10940>, 'name': <__main__.Column object at 0x7f8174b10828>, '__module__': '__main__'}), kwargs {}
DEBUG:root:returning Queryable(<class '__main__.User'>)
DEBUG:root:__eq__ of <__main__.Column object at 0x7f8174b107b8> && 1
select * from user where id = 1

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

搜索引擎

搜索引擎

W.Bruce Croft、Donald Metzler、Trevor Strohman / 刘挺、秦兵、张宇、车万翔 / 机械工业出版社 / 2010-6-1 / 56.00元

本书介绍了信息检索(IR)中的关键问题,以及这些问题如何影响搜索引擎的设计与实现,并且用数学模型强化了重要的概念。对于网络搜素引擎这一重要的话题,书中主要涵盖了在网络上广泛使用的搜索技术。 本书适用于高等院校计算机科学或计算机工程专业的本科生、研究生,对于专业人士而言,本书也不失为一本理想的入门教材。一起来看看 《搜索引擎》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具