格式化SQLAlchemy代码

Dus*_*and 18 python formatting sqlalchemy pep8

我们正在尝试遵循PEP8指南来格式化我们的Python代码并保持每行不超过80个字符.

我们的SQLAlchemy行特别麻烦,拥有大量链接方法和大量复杂参数,逻辑和嵌套函数.

是否有任何特定的最佳实践来格式化Python SQLAlchemy与PEP8的约束?

我找到的最接近的答案就在这里,但我正在处理的代码远比这复杂得多.

Nic*_*oan 28

来到这里希望有更好的解决方案,但我想我更喜欢圆括号包装样式:

subkeyword = (
    Session.query(
        Subkeyword.subkeyword_id, 
        Subkeyword.subkeyword_word
    )
    .filter_by(subkeyword_company_id=self.e_company_id)
    .filter_by(subkeyword_word=subkeyword_word)
    .filter_by(subkeyword_active=True)
    .one()
)
Run Code Online (Sandbox Code Playgroud)

这很好而且清晰,避免了可怕的反斜杠.

  • 将反斜杠误读为反斜杠,这确实强调了你的观点!:) (2认同)

zzz*_*eek 8

PEP-8鼓励反斜杠但SQLAlchemy的代码,我不禁想到他们是最可读的,因为你可以在自己的行开始使每个生成功能.如果括号内有很多参数,我也会在各行中将它们分开.

subkeyword = Session.query(
                  Subkeyword.subkeyword_id, 
                  Subkeyword.subkeyword_word
             ).\
               filter_by(subkeyword_company_id=self.e_company_id).\
               filter_by(subkeyword_word=subkeyword_word).\
               filter_by(subkeyword_active=True).\
               one()
Run Code Online (Sandbox Code Playgroud)

当然,无论代码有多复杂,缩进模式都可以用于任何数量的代码,但是在Python中我们希望避免过多的嵌套.通常使用Query会发生嵌套,因为您正在组合多个子查询.所以一定要提前构建子查询:

subq = Session.query(
                Bat.id, 
                func.foo(Bat.x, Bat.y).label('foo')
               ).\
                filter(Bat.id==Bar.name).\
                correlate(Bar).\
                subquery()

subq2 = Session.query(Foo.id, Foo.bar).\
                filter_by(flag>5).\
                subquery()

result = Session.query(
                  subq.c.id,
                  subq.c.foo,
                  subq2.c.bar
                ).\
                join(subq2, 
                     and_(
                      subq.c.id > subq2.c.foo, 
                      subq.bar == subq2.id
                     )
                ).\
                order_by(subq.c.id, subq2.c.bar)
Run Code Online (Sandbox Code Playgroud)

我欢迎关于反斜杠事情的其他意见.

  • pocoo团队风格指南中的反斜杠使用方法http://www.pocoo.org/internal/styleguide/ (2认同)