sqlalchemy OperationalError有问题:(由于查询调用的自动刷新而引起

问题描述 投票:0回答:1

我正在阅读和测试sqlalchemy的教程,一切都进行得很好,直到我尝试获取我先前添加到数据库中的值。当我这样做时,我收到一条错误消息:

OperationalError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(sqlite3.OperationalError) no such table: userss

如果我使用关闭功能关闭会话,我会得到这个:

OperationalError: (sqlite3.OperationalError) no such table: userss
[SQL: SELECT userss.id AS userss_id, userss.name AS userss_name, userss.fullname AS userss_fullname, userss.nickname AS userss_nickname 

这是我的代码

import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String
engine=create_engine('sqlite:///prueba.db')
Base = declarative_base()
Session=sessionmaker(bind=engine)
#defining a extension of declarative base
class User(Base):
    __tablename__ ='userss'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    nickname=Column(String)
    def __repr__(self):
        return "<User(name='%s', fullname='%s', nickname='%s')>" % (
                            self.name, self.fullname, self.nickname)
#makin a session
session = Session()
ed_user = User(name='ed', fullname='Ed Jones', nickname='edsnickname')
session.add(ed_user)
#when line below is uncommented, the error changes
#session.close()  
our_user = session.query(User).filter_by(name='ed').first()

当我将first()应用于session.query(User).filter_by(name='ed')时出现错误,但是当我不这样做时,我得到了query.filter对象。我读过一些类似的问题,但在User类的定义中没有错字错误。我该如何解决?非常感谢!

python sqlalchemy
1个回答
0
投票

似乎未创建表。

    Base.metadata.create_all(bind=engine)

进行以下更改即可:

import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String
engine=create_engine('sqlite:///prueba.db')
Base = declarative_base()
Session=sessionmaker(bind=engine)
#defining a extension of declarative base
class User(Base):
    __tablename__ ='userss'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    nickname=Column(String)
    def __repr__(self):
        return "<User(name='%s', fullname='%s', nickname='%s')>" % (
                            self.name, self.fullname, self.nickname)




# initialize tables
Base.metadata.create_all(bind=engine)


#makin a session
session = Session()
ed_user = User(name='ed', fullname='Ed Jones', nickname='edsnickname')
session.add(ed_user)
#when line below is uncommented, the error changes
#session.close()
our_user = session.query(User).filter_by(name='ed').first()

print(our_user)
© www.soinside.com 2019 - 2024. All rights reserved.