我使用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
我以前曾经使用过这种方法,但效果很好:关于它为什么不起作用的任何想法吗?
我删除并再次创建了数据库;并且确保我的烧瓶应用程序在本地主机上运行。
谢谢!
答案 0 :(得分:0)
这是因为您在声明实体之前先呼叫db.generate_mapping()
。
首先,声明数据库对象,然后声明实体,然后绑定数据库,调用generate mapping
。
还要注意,bind(...)
可以在generate_mapping()
之前的任何时间调用。