使用Python/Flask SQLAlchemy代码在sqlite中存储数据时出现问题
我试图将用户和密码存储在使用sqlite db创建的表中。似乎pwd列不存在,而如果我在sqlite中检查表,它确实包含该列 该错误返回以下内容:使用Python/Flask SQLAlchemy代码在sqlite中存储数据时出现问题,python,sqlite,sqlalchemy,Python,Sqlite,Sqlalchemy,我试图将用户和密码存储在使用sqlite db创建的表中。似乎pwd列不存在,而如果我在sqlite中检查表,它确实包含该列 该错误返回以下内容: sqlalchemy.exc.OperationalError OperationalError: (sqlite3.OperationalError) table user has no column named pwd [SQL: INSERT INTO user (id, username, pwd) VALUES (?, ?, ?)] [p
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', '$2b$12$j5NPKCgv8DsFnOJtHE2xjOyXMoGSFCz89Gf/Oy2Hs.FfEx/0BuOY2')]
(Background on this error at: http://sqlalche.me/e/e3q8)
ERROR DETAILS:
File "/home/itad/DICP_evo_dev/venv/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
def do_executemany(self, cursor, statement, parameters, context=None):
cursor.executemany(statement, parameters)
def do_execute(self, cursor, statement, parameters, context=None):
cursor.execute(statement, parameters)
def do_execute_no_params(self, cursor, statement, context=None):
cursor.execute(statement)
def is_disconnect(self, e, connection, cursor):
这是我创建的用户类:
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data-users.sqlite'
bcrypt = Bcrypt(app)
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer(), primary_key = True, autoincrement=True)
username = db.Column(db.String(64), unique = True)
pwd = db.Column(db.String(128))
def __init__(self,id,username,pwd):
self.id=id
self.username = username
self.pwd = bcrypt.generate_password_hash(pwd)
这是我在应用程序中使用python GUI手动插入密码的代码:
from store_user_db import User, db
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()
在这里,我检查用户表是否存在以及模式,我还尝试从用户运行sqlite>SELECT*,但它没有返回任何结果
itad@itad-virtual-machine:~/DICP_evo_dev$ sqlite3 data-users.sqlite
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> .schema user
CREATE TABLE user (
id INTEGER NOT NULL,
username VARCHAR,
pwd VARCHAR,
PRIMARY KEY (id),
UNIQUE (username)
);
如果我给你看屏幕截图可能会更简单,注释的部分就是我用来创建表的部分,然后我对它进行了注释,因为你只需要创建一次
我没有把它放在代码中,但我之前用函数table()创建了db和表,然后创建了_all()等等。。然后我评论说。事实上,如果我键入sqlite>.schema user,它会显示表,应该在db no中吗?我认为问题在于在模型中声明了2次用户变量
class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer(), primary_key = True, autoincrement=True)
username = db.Column(db.String(64), unique = True)
pwd = db.Column(db.String(128))
def __init__(self,id,username,pwd):
db.Model.__init__(self, id=id, username=username, pwd=pwd)
这将解决问题。似乎没有创建表,请尝试运行“python”(运行REPL),导入具有db对象的类并运行“db.create_all()”(这将根据您的模型在db中创建表)查看创建表的代码,然后创建用户类,可能存在一些问题,因为在用户类中,我正在使用User(db.Model),而在使用engine和Metadata()函数之前创建表时?实际上,当我创建表时,没有对db的引用 下面的屏幕截图,左边的代码:
不,不是这样,还是同样的错误。我担心代码还可以,但不知怎么的,我在加载数据库或某些sqlite配置时弄糟了,我不知道。当我说我已经连续两周被困在这个问题上时,你相信我吗?我可以相信,顺便说一句,你还可以使用flask shell中的
db.create_all()
创建数据库,也可能将你的python版本从2.7改为3.7或3.8,这将有助于不,我的天哪,我不会做任何迁移这是一个巨大的应用程序,我的工作!!!这将是一个更大的混乱!!!我没有把它放在代码中,但我之前用函数table()创建了db和表,然后创建了_all()等等。。然后我评论说。事实上,如果我键入sqlite>.schema user,它会显示该表是否应该在数据库中?否?这意味着该表是否已在数据库中创建?是,该表是在数据库中创建的。它接受您在模型文件中定义的表和属性,并在数据库中创建它,那么当我尝试存储密码时,怎么可能告诉我表中不存在pwd列?是否可能是我以某种方式弄乱了数据库,或者没有重新初始化?也许我可以尝试删除该表,然后重新创建数据库?如何从sqlite命令提示符中删除该表?