我试过没有数据库我的应用程序工作得很好,但是使用peewee和postgres,它根本无法创建表。
我尝试了在线发布的不同方法,但它不起作用,如果你在heroku上使用了peewee,那么任何人都可以帮忙。
我的model.py
if os.environ.get('DATABASE_URL'):
DATABASE_URL = os.environ.get('DATABASE_URL')
db = urlparse(DATABASE_URL)
user = db.username
password = db.password
path = db.path[1:]
host = db.hostname
port = db.port
database = PostgresqlDatabase(path, user=user, password=password, host=host, port=port)
else:
database = PostgresqlDatabase('heroku')
class BaseModel(Model):
class Meta:
database = database
class User(BaseModel):
name = CharField()
email = CharField(null=False, unique=True)
将create table从if语句移动到welcome函数表后。
@app.route('/')
def welcome():
call('printenv')
a = 'Default'
b = 'Default'
if os.environ.get('DATABASE_URL'):
a = os.environ.get('DATABASE_URL')
if os.environ.get('HEROKU'):
b = os.environ.get('HEROKU')
create_model_tables([Users], fail_silently=True)
Users.insert(name='John', email='Doe').execute()
return render_template('index.html', a=a, b=b)
if __name__ == '__main__':
app.run(port=5000, debug=True)
答案 0 :(得分:1)
“user”是一个保留表 - 尝试:
class User(Model):
...
class Meta:
db_table = 'users'
答案 1 :(得分:0)
from playhouse.db_url import connect
import settings
local_url = 'postgresql://{}:{}@localhost:5432/{}'.format(settings.DB_USER, settings.DB_PASS, settings.DB_NAME)
database = connect(os.environ.get('DATABASE_URL') or local_url)
class BaseModel(Model):
class Meta:
database = database
使用这种方式,它很容易,错误的可能性很小。
你必须在if __name__ == '__main__:
这个陈述之前创建一个表,因为在heroku上你给出的设置是这样的,在那之下的任何东西都不会起作用。
喜欢我的uswgi.ini
[uwsgi]
http-socket = :$(PORT)
master = true
die-on-term = true
module = app:app
memory-report = true
module = app:app
表示从app.py运行应用程序而不是运行app.py