2017-04-19 67 views
1

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

my app

我尝试了不同的方法,在网上发布,但如果你已经使用peewee在Heroku请帮助它不工作,任何人。

我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) 

移动从if语句迎接创建功能表创建表之后。

@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) 

回答

1

“用户”是保留表 - 尝试:

class User(Model): 
    ... 
    class Meta: 
     db_table = 'users' 
+0

我已经改变了表名称仍然得到同样的错误。 –

+0

LINE 1:INSERT INTO“users”(“name”,“email”)VALUES('John','Doe')... 2017-04-20T03:36:57.055897 + 00:00 app [web.1 ]:^ 2017-04-20T03:36:57.055896 + 00:00 app [web.1]:psycopg2.ProgrammingError:关系“users”不存在 –

+0

那么你需要创建表格,很明显。 – coleifer

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