【发布时间】:2016-12-25 17:16:21
【问题描述】:
模型FacebookPost和TwitterPost共享一个枚举类型叫做。创建facebook_posts表时,但试图创建twitter_posts表时,是重新创建这种类型的导致错误的尝试该枚举正确创建。 P>
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) type "types" already exists
[SQL: "CREATE TYPE types AS ENUM ('Video', 'GIF', 'Scratch Reel', 'Card', 'Video Card', 'Text', 'Photo', 'Shared Article', 'Reply', 'Canvas', 'Carousel', 'Video Carousel', 'Link', 'Status')"]
这是我在创建数据库的方式。我不能使用Base.metadata.create_all,因为我需要明确的是创造了什么表方面 P>
Engine = create_engine(db_url, echo=False)
Campaign.__table__.create(Engine)
SubCampaign.__table__.create(Engine)
Creative.__table__.create(Engine)
Hashtag.__table__.create(Engine)
FacebookPost.__table__.create(Engine)
TwitterPost.__table__.create(Engine)
我创建的枚举这样:
from sqlalchemy import Enum
types = ('Video', 'GIF', 'Scratch Reel', 'Card', 'Video Card',
'Text', 'Photo', 'Shared Article', 'Reply', 'Canvas',
'Carousel', 'Video Carousel', 'Link', 'Status')
goals = ('CTR', 'ER', 'Awareness', 'CPGA')
sources = ('Facebook', 'Twitter', 'Instagram', 'Tumblr')
vars_ = locals().copy()
for k, v in vars_.items():
if isinstance(v, tuple):
locals()[k] = Enum(*v, name=k)
【问题讨论】:
-
你看了吗?可能会回答你的问题。 stackoverflow.com/questions/28894257/…
-
正是此答案stackoverflow.com/a/33042283/540341 跨度>
-
这就是我创建的枚举的方式。 SPAN>
-
您可以显示整个代码,包括FacebookPost&TwitterPost类的定义?至少有问题的领域。跨度>
-
从我的理解你基本上想,如果不存在,我创建类型。有一个IF EXISTS在插入但不能创建TYPE。也许stackoverflow.com/a/28274121/1804656将帮助? SPAN>
标签: python postgresql enums sqlalchemy