使用 for 循环设置 table 的列

Use a for loop to set columns of a table

我目前这样定义 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

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

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

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))

我最终使用了 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)