如何解决我的模型SQLAlchemy SQlite Flask Python出了点问题 示例工作版本
我的模型出问题了?你有异常吗?尝试使用SQLAlchemy将用户和密码存储到SQLite db,但返回错误,提示用户表中的pwd列不存在,的确,如果我检查sqlite> .schema,它将返回具有正确结构和pwd列的表,否如果我查询的话,里面的数据。
我首先使用Table()函数创建表,然后在我定义User类下,可能是因为在该类中没有对表的列名的引用?但是我已经导入了表名 =“用户”,所以它应该不能工作?
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from sqlalchemy import *
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data-users.sqlite'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer(),primary_key = True,autoincrement=True)
username = db.Column(db.String(64),unique = True)
pwd = db.Column(db.String())
def __repr__(self):
return '<User %r>' % self.username
这里我将用户数据存储在表中
from store_user_db import User,db
db.create_all()
DICP_FTP_DESTINATION_PSW=self.submit_pwd()
user = User(id=001,username="ita_itf",pwd=DICP_FTP_DESTINATION_PSW)
db.session.add(user)
db.session.commit()
这是错误:
sqlalchemy.exc.OperationalError
OperationalError: (sqlite3.OperationalError) table user has no column named pwd
[SQL: INSERT INTO user (id,username,pwd) VALUES (?,?,?)]
[parameters: (1,'ita_itf',<read-only buffer for 0x7efe495709f0,size -1,offset 0 at 0x7efe500c3830>)]
解决方法
class Person extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: RaisedButton(
child: Container(
width: 100,height: 100,child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
Text("Person"),Icon(Icons.person)
],),);
}
}
class History extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: RaisedButton(
child: Container(
width: 100,child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
Text("History"),Icon(Icons.history)
],);
}
}
仅在表不存在时才会创建。我怀疑您的问题是您在最近的一段时间内创建了该表,当时您的模型中还没有db.create_all()
列。
因此,现在您运行pwd
,它实际上什么都不做(因为db.create_all()
表已经存在),但是当您尝试访问从未创建的user
列时会崩溃。
您可以pwd
销毁所有当前表,也可以手动(或使用迁移工具)添加'missing'db.drop_all()
列,以便数据库与模型匹配。
此外,在此特定示例中,所有这些代码都不会执行任何操作(除非您在未包含的代码中做一些不寻常的操作)。
pwd
示例工作版本
engine= create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
#CREATE TABLE
meta=MetaData()
userstable = Table('user',meta,\
Column('id',Integer,primary_key = True,autoincrement=True),\
Column('username',String,unique = True),\
Column('pwd',LargeBinary,unique = True))
meta.create_all(engine)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。