glubokov
glubokov

Reputation: 59

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: items

I don't understand why I have this error. Please explain the error. I used official documentation.

I run Pipenv virtual env: python 3.8.2 sqlalchemy 1.3.16

You can try run this code too.

import enum

from sqlalchemy import create_engine, Column, Integer, String, Enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()


class Type(str, enum.Enum):
    ONE = "one"
    TWO = "two"


class Item(Base):
    __tablename__ = 'items'

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, unique=True, index=True)
    type = Column(Enum(Type), default=Type.ONE, nullable=False)


item = Item(name="item_name", type="one")
session.add(item)

print(Item.__table__)
session.commit()
for name in session.query(Item.name):
    print(name)

Upvotes: 1

Views: 1472

Answers (2)

glubokov
glubokov

Reputation: 59

I added:

engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()
Base.metadata.create_all(bind=engine)
Session = sessionmaker(bind=engine)
session = Session()

It creates the tables in the database (there are ways of using SQLAlchemy with pre-existing tables, so an explicit instruction is necessary).

Upvotes: 3

A Hefty Duodenum
A Hefty Duodenum

Reputation: 101

In case it ends up helping someone, my issue was due to using an in memory sqlite db to unittest an API. Pytest would set up the database and tables with one connection while the API would create its own separate connection when the test were hitting endpoints. This ultimately solved it for me.

engine = create_engine("sqlite:///:memory:", poolclass=StaticPool, connect_args={'check_same_thread': False})

Ref: https://docs.sqlalchemy.org/en/14/dialects/sqlite.html#using-a-memory-database-in-multiple-threads

Upvotes: 1

Related Questions