gpt4 book ai didi

Python SQLAlchemy 更改 __init__ 中的 __tablename__

转载 作者:行者123 更新时间:2023-11-29 10:02:06 26 4
gpt4 key购买 nike

我有 2 个具有相同列结构的表。

该脚本从 2 个不同的 json 源中提取,其键略有不同。

我的 Item 类识别源,然后解析数据。

在我的 Item 类中,我希望能够根据数据源更改 __tablename__

这可能吗?还是我需要为每个数据源编写一个单独的类?

谢谢

代码:

Base = declarative_base()


class Item(Base):
__tablename__ = 'products'

timestamp = Column(TIMESTAMP)
itemid = Column(String, primary_key=True, index=True, unique=True)
name = Column(String)

def __init__(self, item):

if type(item) == Product_A:
self.__tablename__ = "A_products"
# Parse Data
elif type(item) == Product_B:
self.__tablename__ = "B_products"
# Parse Data

最佳答案

这不是一个好主意,在 sqlalchemy 中每个类都应该映射到单个表。解决方案是创建两个类和一个在它们之间分派(dispatch)的自由函数:

Base = declarative_base()
class Item_A(Base):
__tablename__ = 'A_products'
timestamp = Column(TIMESTAMP)
itemid = Column(String, primary_key=True, index=True, unique=True)
name = Column(String)

class Item_B(Base):
__tablename__ = 'B_products'
timestamp = Column(TIMESTAMP)
itemid = Column(String, primary_key=True, index=True, unique=True)
name = Column(String)

def create_item_object(item):
if isinstance(item, Product_A):
result = Item_A()
#... more stuff
elif isinstance(item, Product_B):
result = Item_B()
#... more stuff
return result

关于Python SQLAlchemy 更改 __init__ 中的 __tablename__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52707097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com