Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python/Flask SQLAlchemy代码在sqlite中存储数据时出现问题_Python_Sqlite_Sqlalchemy - Fatal编程技术网

使用Python/Flask SQLAlchemy代码在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

我试图将用户和密码存储在使用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 (?, ?, ?)]
[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命令提示符中删除该表?