here上的Peewee和postgres,无法创建表

时间:2017-04-19 20:32:05

标签: python postgresql python-3.x heroku peewee

我试过没有数据库我的应用程序工作得很好,但是使用peewee和postgres,它根本无法创建表。

my app

我尝试了在线发布的不同方法,但它不起作用,如果你在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)

2 个答案:

答案 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