OperationalError:(sqlite3.OperationalError)没有这样的表:user [英] OperationalError: (sqlite3.OperationalError) no such table: user

查看:82
本文介绍了OperationalError:(sqlite3.OperationalError)没有这样的表:user的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

总体而言,我对Flask和Web开发是完全陌生的.我需要的是使用Steam ID登录到网站.我按照此处的指示进行操作,但出现以下错误:

OperationalError:(sqlite3.OperationalError)没有这样的表:user

似乎可以正确打开Steam网站,但是按 登录 时,它会中断.那么,我的错误是什么?任何帮助表示赞赏.代码:

从烧瓶导入

 从Flask,render_template,重定向,会话,json,g从flask_bootstrap导入Bootstrap从flask.ext.sqlalchemy导入SQLAlchemy从flask.ext.openid导入OpenID导入urllib汇入app = Flask(__ name__)app.secret_key ='123'引导程序(应用程序)app.config.from_pyfile('settings.cfg')db = SQLAlchemy(应用程序)oid = OpenID(应用程式)类User(db.Model):id = db.Column(db.Integer,primary_key = True)steam_id = db.Column(db.String(40))昵称= db.String(80)@staticmethoddef get_or_create(steam_id):rv = User.query.filter_by(steam_id = steam_id).first()如果rv为None:rv =用户()rv.steam_id = steam_iddb.session.add(rv)返回rvdef get_steam_userinfo(steam_id):选项= {'key':app.config ['STEAM_API_KEY'],'steamids':steam_id}url ='http://api.steampowered.com/ISteamUser/'\'GetPlayerSummaries/v0001/?%s'%urllib.urlencode(选项)rv = json.load(urllib.urlopen(url))返回rv ['response'] ['players'] ['player'] [0]或{}_steam_id_re = re.compile('steamcommunity.com/openid/id/(.*?)$')@ app.route('/登录')@ oid.loginhandlerdef login():如果g.user不为None:返回重定向(oid.get_next_url())返回oid.try_login('http://steamcommunity.com/openid')@ oid.after_logindef create_or_login(resp):匹配= _steam_id_re.search(resp.identity_url)g.user = User.get_or_create(match.group(1))steamdata = get_steam_userinfo(g.user.steam_id)g.user.nickname = steamdata ['personaname']db.session.commit()session ['user_id'] = g.user.idflash('您以%s的身份登录'%g.user.nickname)返回重定向(oid.get_next_url())@ app.before_requestdef before_request():g.user =无如果会话中有"user_id":g.user = User.query.get(session ['user_id'])@ app.route('/')def homepage():返回render_template('mainpage.html')@ app.route('/登出')def logout():session.pop('user_id',无)返回重定向(oid.get_next_url())如果__name__ =='__main__':app.run(debug = True) 

解决方案

在运行应用程序之前,您需要运行 db.create_all().这将在数​​据库中创建模型所描述的所有表.

如果您不熟悉烧瓶,可以按照快速入门指南此处

I'm completely new to flask and web development in general. And what I need is to login to a website using steam id. I'm doing it as it said here, but get the following error:

OperationalError: (sqlite3.OperationalError) no such table: user

It seems to open up steam website correctly but it breaks when I press Log In. So, what's my mistake ? Any help is appreciated. The code:

from flask import Flask, render_template, redirect, session, json, g
from flask_bootstrap import Bootstrap
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.openid import OpenID
import urllib
import re

app = Flask(__name__)
app.secret_key = '123'
Bootstrap(app)
app.config.from_pyfile('settings.cfg')
db = SQLAlchemy(app)
oid = OpenID(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    steam_id = db.Column(db.String(40))
    nickname = db.String(80)

    @staticmethod
    def get_or_create(steam_id):
        rv = User.query.filter_by(steam_id=steam_id).first()
        if rv is None:
            rv = User()
            rv.steam_id = steam_id
            db.session.add(rv)
        return rv

def get_steam_userinfo(steam_id):
    options = {
        'key': app.config['STEAM_API_KEY'],
        'steamids': steam_id
    }
    url = 'http://api.steampowered.com/ISteamUser/' \
          'GetPlayerSummaries/v0001/?%s' % urllib.urlencode(options)
    rv = json.load(urllib.urlopen(url))
    return rv['response']['players']['player'][0] or {}

_steam_id_re = re.compile('steamcommunity.com/openid/id/(.*?)$')

@app.route('/login')
@oid.loginhandler
def login():
    if g.user is not None:
        return redirect(oid.get_next_url())
    return oid.try_login('http://steamcommunity.com/openid')

@oid.after_login
def create_or_login(resp):
    match = _steam_id_re.search(resp.identity_url)
    g.user = User.get_or_create(match.group(1))
    steamdata = get_steam_userinfo(g.user.steam_id)
    g.user.nickname = steamdata['personaname']
    db.session.commit()
    session['user_id'] = g.user.id
    flash('You are logged in as %s' % g.user.nickname)
    return redirect(oid.get_next_url())

@app.before_request
def before_request():
    g.user = None
    if 'user_id' in session:
        g.user = User.query.get(session['user_id'])

@app.route('/')
def homepage():
    return render_template('mainpage.html')

@app.route('/logout')
def logout():
    session.pop('user_id', None)
    return redirect(oid.get_next_url())

if __name__ == '__main__':
    app.run(debug=True)

解决方案

You need to run a db.create_all() before running your app. This will create all the tables described by your model in the database.

If you are new to flask you can follow the quickstart quide here

这篇关于OperationalError:(sqlite3.OperationalError)没有这样的表:user的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆