【问题标题】:Use a for loop to set columns of a table使用 for 循环设置表的列
【发布时间】:2021-08-18 20:22:12
【问题描述】:

我目前这样定义 PostgreSQL 数据库的表和列:

from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Float, Integer
Base = declarative_base()
class MyTable(Base):
    __tablename__ = "my_table"
    col_1 = Column(Integer, primary_key=True)
    col_2 = Column(Float)
    col_3 = Column(Float)
    col_4 = Column(Float)
    col_5 = Column(Float)
    # ....
    col_24 = Column(Float)
    col_25 = Column(Float)

我不想多次编写相同的相同行,而是使用设置相似列的 for 循环:

from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Float, Integer
Base = declarative_base()
class MyTable(Base):
    __tablename__ = "my_table"
    col_1 = Column(Integer, primary_key=True)
    for ind in range(2, 26):
        # set col_$ind
        ????

我应该在 for 循环中做什么来设置属性 col_$ind

【问题讨论】:

标签: python-3.x postgresql sqlalchemy


【解决方案1】:

完全合理的目标 - 作为软件开发人员,您的目标是高效地使用代码。但是,随着您与关系数据库进行更深入的交互,您可能会发现显式(尽管是多余的)定义的价值。

尽管如此,以下是实现循环表定义的方法:

from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Float, Integer

Base = declarative_base()

# Define your class here
class MyTable(Base):
    __tablename__ = "my_table"
    
    # define your primary key
    col_1 = Column(Integer, primary_key=True, comment='primary key')


# Create columns with a loop
for i in range(2, 26):
    setattr(MyTable, f'col_{i}', Column(Float))

【讨论】:

    【解决方案2】:

    我最终使用了vars()

    from sqlalchemy.orm import declarative_base
    from sqlalchemy import Column, Float, Integer
    Base = declarative_base()
    class MyTable(Base):
        __tablename__ = "my_table"
        col_1 = Column(Integer, primary_key=True)
        for ind in range(2, 26):
            # set col_$ind
            vars()[f"col_{ind}"] = Column(Float)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 2022-01-16
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多