【发布时间】:2020-05-17 21:33:47
【问题描述】:
我从“data.sqlite”的数据库中查询数据,运行我的项目并得到 “sqlite3.OperationalError: no such table: blog_post”。如果您能帮我解决这个错误,那就太好了。谢谢!
我在models.py中创建了一个名为“BlogPost”的表,它的表名是“blog_post”:
class BlogPost(db.Model):
__tablename__ = 'blog_post'
users = db.relationship(User)
blog_id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer,db.ForeignKey('users.id'), nullable=False)
date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) #
problem_name = db.Column(db.String(140), nullable=False)
text = db.Column(db.Text, nullable=False)
blog_image = db.Column(db.String(140), nullable=False, server_default='default_blog.jpg')
def __init__(self, text, problem_name, user_id, blog_image):
self.text = text
self.problem_name = problem_name
self.user_id = user_id
self.blog_image = blog_image
def __repr__(self):
return f"Post ID: {self.post_id} -- Date:{self.date}---{self.problem_name}"
使用查询控制台,我检查并看到这个表存储数据很好,我可以看到没有错误。
我想从该表中查询数据并将其显示到我网页上的 HTML 文件中,因此我使用命令“myproject.models import BlogPost”将其导入名为“views.py”的 Python 文件(我的 Pycharm IDE显示命令运行正常且没有错误)
然后我在下面有这些代码:
from flask import render_template, request, Blueprint
import _sqlite3
...some other import
init_db()
conn = _sqlite3.connect('data.sqlite', check_same_thread=False)
c = conn.cursor()
core = Blueprint('core', __name__)
@core.route('/', methods=['GET', 'POST'])
def index():
search = Blogsearch_form(request.form)
if request.method == 'POST':
c.execute("SELECT * FROM blog_post WHERE problem_name LIKE (?)", ('%' + str(search) + '%',))
results = c.fetchall()
return render_template('blog_search_result.html', results=results)
我的data.sqlite数据库图片:
我在控制台中查询查看表 blog_post,它发现表名为 blog_post。它还显示了我在网站中输入的所有数据:
顺便说一句,这是我用来在项目的 init.py 中创建“data.sqlite”数据库的代码之一:
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir,
'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
【问题讨论】: