python - 找不到 SQLAlchemy 错误表
问题描述
我是使用 sqlAlchemy 的新手,当我尝试插入数据条目时,我不断收到此错误。请告诉我我做错了什么。
test.py 代码:
import sys
import sqlalchemy
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column,ForeignKey,Integer,String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine
engine = create_engine('sqlite:///restaurantmenu.db')
Base = declarative_base()
class Restaurant(Base):
__tablename__ = "restaurant"
name = Column(String(80),nullable=False)
id = Column(Integer,primary_key=True)
class MenuItem(Base):
__tablename__ = 'menu_item'
name = Column(String(80),nullable=False)
id = Column(Integer,primary_key = True)
course = Column(String(250))
description = Column(String(250))
price = Column(String(9))
restaurant_id = Column(Integer,ForeignKey('restaurant.id'))
restaurant = relationship(Restaurant)
Base.metadata.create_all(engine)
accessDatabase.py 代码
import sys
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from test import Base,Restaurant,MenuItem
engine = create_engine('sqlite:///restaurantmenu.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine,autoflush=False)
session = DBSession()
MyFirstRestaurant = Restaurant(name = "Pizza Palace")
session.add(MyFirstRestaurant)
session.commit()
session.query(Restaurant).all()
当我运行 accessDatabase.py 并在 session.commit 行时出现问题
这里的错误:
sqlalchemy.exc.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: restaurant [SQL: 'INSERT INTO restaurant (name) VALUES (?)'] [parameters: ('Pizza Palace',)]
(Background on this error at: http://sqlalche.me/e/e3q8)
解决方案
这都是一个愚蠢的错误。在创建表之前初始化引擎是罪魁祸首。在我移动了文件底部的这两行代码之后。终于跑了。引擎和设置元数据应在创建表后完成。