python - 使用条件语句 (IF/ELIF/ELSE) 使代码更简洁、更短

标签 python sqlalchemy crud

目标:使用 IF/ELIF/ELSE 条件减少 (Python)retrieve_method 的冗长。

对象表的结构和方法:这个特定的retrieve_method根据构成数据库中用户表的元素调用用户对象(例如用户名名字姓氏电子邮件等)

到目前为止,我的代码正在运行,但是它可以使用一些更干净、更整洁的代码。我不确定是否应该使用 keywords 还是 *args。我仍在学习 Python,因此任何信息丰富的建议将不胜感激。 (您会注意到,我现在使用抽象词 something_unique 来将输入与表中找到的元素进行比较。如果两者匹配,该方法将返回匹配的项目。)

我该如何改进?最好的方法是什么?优点?缺点?

软件:Python 2.7.9、SQLAlchemy 1.0.9

<小时/>

代码:

def retrieve_user(self, something_unique):
    if isinstance(something_unique, int):
        print 'retrieve_user_id: ', something_unique # added
        return self.session.query(User).\
            filter(User.id == something_unique).one()
    elif isinstance(something_unique, basestring):
        print 'retrieve_user: ', something_unique # added
        return self.session.query(User).\
            filter(func.lower(User.username) == func.lower(something_unique)).first() 
    elif isinstance(something_unique, basestring):
        print 'retrieve_user email', something_unique
        return self.session.query(User).\
            filter(func.lower(User.email) == func.lower(something_unique)).first()
    elif isinstance(something_unique, User):
        return something_unique
    else:
        raise ValueError('Value being passed is an object')

最佳答案

一种方法是使用关键字参数:

def retrieve_user(self, id=None, name=None, email=None):
    if id:
        return self.session.query(User).\
            filter(User.id == id).one()
    if name:
        return self.session.query(User).\
            filter(func.lower(User.username) == func.lower(name)).first()
etc

关于python - 使用条件语句 (IF/ELIF/ELSE) 使代码更简洁、更短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018068/

相关文章:

python - SQLAlchemy : Table primary_key - unexpected keyword argument error

ruby-on-rails - Rails 单表继承。共享 Controller ,如何更新 (CRUD)

python - Pandas 数据框 : get index of max element

python - 如何在 Python 中使用 Nettle?

python - 来自 Python/SQLAlchemy 的 SQL Server 查询中需要单个反斜杠

mysql - 优化 SQLAlchemy 中的hybrid_properties

java - Spring Roo 不生成 CRUD

java - 如何在从 Mongo 读取而不是读取 DBObject 时转换为 Model 对象?

python - 请求之间神秘的字典持久性?

python - 合并两个数据帧并分别添加 resp 列