seed.py文件将无法在PostgresQL db上运行,是否已生成映射?

时间:2019-07-17 15:43:15

标签: python postgresql flask ponyorm

我使用Flask和PonyORM应用程序建立了一个简单的PostgresQL数据库,名为“与海恩斯一起烹饪”:

from flask import Flask
from pony.orm import Database

db = Database()
app = Flask(__name__)

db.bind('postgres', 'postgres://localhost:5432/cooking-with-haynes')

db.generate_mapping(create_tables=True)

@app.route('/')
def home():
    return 'Hello World!', 200

...具有配方模型:

from pony.orm import Required, Optional 
from app import db

class Recipe(db.Entity):
    name = Required(str)
    description = Required(str)
    photo = Optional(str)
    cooking_time = Required(int)
    prep_time = Required(int)

和seed.py文件:

from pony.orm import db_session 
from app import db 
from models.recipe import Recipe

db.drop_all_tables(with_all_data=True) db.create_tables()

with db_session():

    # create some recipees
    Recipe(name="Lasagne", description="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", cooking_time=60, prep_time=25)

    # save the data to the database
    db.commit()

当我运行seed.py文件填充数据库时,在终端中出现以下错误:

pony.orm.core.ERDiagramError: Cannot define entity 'Recipe': database mapping has already been generated

我以前曾经使用过这种方法,但效果很好:关于它为什么不起作用的任何想法吗?

我删除并再次创建了数据库;并且确保我的烧瓶应用程序在本地主机上运行。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是因为您在声明实体之前先呼叫db.generate_mapping()。 首先,声明数据库对象,然后声明实体,然后绑定数据库,调用generate mapping。 还要注意,bind(...)可以在generate_mapping()之前的任何时间调用。