![](/img/trans.png)
[英]peewee.OperationalError: table gist has no column named name
[英]Flask: peewee.OperationalError: no such table:
我正在嘗試使用python 3.6在win 10上本地運行https://github.com/swifthorseman/flask-peewee-heroku-setup 。 我不確定這個項目是否設計為在本地運行,也許它只是為heroku設計的。
我在本地運行了文件teletubbies.py,它創建了db和table,如屏幕截圖所示。 要在本地運行(或嘗試),我添加了以下行:
if __name__ == '__main__':
app.run(debug=True, use_reloader=True)
我正在使用它
python server.py
我擁有整個server.py文件:
from flask import Flask, render_template, g
from tellytubbies import retrieve_all, db_proxy
app = Flask(__name__)
@app.before_request
def before_request():
g.db = db_proxy
g.db.connect()
@app.after_request
def after_request(response):
g.db.close()
return response
@app.route('/')
def index():
tellytubbies = retrieve_all()
return render_template("index.html", tellytubbies=tellytubbies)
if __name__ == '__main__':
app.run(debug=True, use_reloader=True)
通過單步執行代碼我直到該行才看到錯誤:
tellytubbies = retrieve_all()
然后崩潰給出以下Traceback:
Traceback (most recent call last):
File "....myfile\lib\site-packages\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "....myfile\lib\site-packages\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "....myfile\lib\site-packages\flask\app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "....myfile\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "....myfile\lib\site-packages\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "....myfile\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "....myfile\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "....myfile\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "....myfile\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "....myfile\lib\site-packages\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "...\server.py", line 18, in index
tellytubbies = retrieve_all()
File "...\tellytubbies.py", line 32, in retrieve_all
for tellytubby in TellyTubby.select().order_by(TellyTubby.name):
File "....myfile\lib\site-packages\peewee.py", line 3281, in __iter__
return iter(self.execute())
File "....myfile\lib\site-packages\peewee.py", line 3274, in execute
self._qr = ResultWrapper(model_class, self._execute(), query_meta)
File "....myfile\lib\site-packages\peewee.py", line 2939, in _execute
return self.database.execute_sql(sql, params, self.require_commit)
File "....myfile\lib\site-packages\peewee.py", line 3837, in execute_sql
self.commit()
File "....myfile\lib\site-packages\peewee.py", line 3656, in __exit__
reraise(new_type, new_type(*exc_args), traceback)
File "....myfile\lib\site-packages\peewee.py", line 135, in reraise
raise value.with_traceback(tb)
File "....myfile\lib\site-packages\peewee.py", line 3830, in execute_sql
cursor.execute(sql, params or ())
peewee.OperationalError: no such table: tellytubby
retrieve_all()函數來自teletubbies.py文件:
def retrieve_all():
results = []
for tellytubby in TellyTubby.select().order_by(TellyTubby.name):
results.append(tellytubby)
return results
當我運行teletubbies.py時,teletubbies.py可以正常工作
python teletubbies.py
我怎樣才能使這個工作?
在運行python teletubbies.py
初始化sqlite數據庫之后,我的燒瓶服務器正常工作。 但是,如果我刪除通過直接運行腳本創建的tellytubbies.db
文件,則燒瓶服務器將失敗並引用相同的異常。
這里需要考慮的是,當你運行tellytubbies.py
,數據庫文件tellytubbies.db
將在你運行它的任何目錄中創建。 然后,如果您從另一個目錄運行server.py
- 例如,如果您的IDE正在運行它 - 它將找不到其他tellytubbies.db
,因此將創建一個新的; 但是因為表只是在tellytubbies.py
的__main__
部分創建的,所以不會創建表。
所以你的燒瓶服務器需要做一些teletubbies.py
正在進行的初始化。 我用以下內容替換了server.py
的if __name__ == '__main__':
部分,它可以正常工作。 無論您是保留相同的數據庫文件還是在運行之間將其從頭開始刪除它都將起作用。 我添加了一個檢查,以確保不會重復插入相同的行。
if __name__ == '__main__':
from teletubbies import add_tellytubbies, TellyTubby
db_proxy.connect()
db_proxy.create_tables([TellyTubby], safe=True)
if TellyTubby.select().count() == 0:
add_tellytubbies()
app.run(debug=True, use_reloader=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.