Python 找不到SQLAlchemy错误表
我不熟悉使用sqlAlchemy,当我尝试插入一个数据条目时,我总是会遇到这个错误。请告诉我我做错了什么 test.py代码:Python 找不到SQLAlchemy错误表,python,sqlalchemy,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
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)
请运行
test.py
代码一次,以创建包含所有表和元数据的数据库架构
然后继续运行accessDatabase.py
code
当我这样做的时候,我得到了以下结果
> C:\Users\userX\PycharmProjects\PegabaseFilter\venv\Scripts\python.exe
> C:/Users/userX/PycharmProjects/PegabaseFilter/test_2.py
> [<test.Restaurant object at 0x00000000032A8F28>, <test.Restaurant
> object at 0x00000000032A8A90>, <test.Restaurant object at
> 0x00000000032DF048>, <test.Restaurant object at 0x00000000032DF0B8>,
> <test.Restaurant object at 0x00000000032DF160>, <test.Restaurant
> object at 0x00000000032DF208>, <test.Restaurant object at
> 0x0000000003251BA8>] {'_sa_instance_state':
> <sqlalchemy.orm.state.InstanceState object at 0x00000000032A8FD0>,
> 'name': u'Pizza Palace', 'id': 1} {'_sa_instance_state':
> <sqlalchemy.orm.state.InstanceState object at 0x00000000032A8A90>,
> 'name': u'Pizza Palace', 'id': 2} {'_sa_instance_state':
> <sqlalchemy.orm.state.InstanceState object at 0x00000000032A8C88>,
> 'name': u'Pizza Palace', 'id': 3} {'_sa_instance_state':
> <sqlalchemy.orm.state.InstanceState object at 0x00000000032A85C0>,
> 'name': u'Pizza Palace_userX', 'id': 4} {'_sa_instance_state':
> <sqlalchemy.orm.state.InstanceState object at 0x00000000032A8588>,
> 'name': u'Pizza Palace_userX', 'id': 5} {'_sa_instance_state':
> <sqlalchemy.orm.state.InstanceState object at 0x00000000032A84A8>,
> 'name': u'Pizza Palace_userX', 'id': 6} {'_sa_instance_state':
> <sqlalchemy.orm.state.InstanceState object at 0x0000000003251C18>,
> 'name': u'Pizza Palace_userX', 'id': 7}
>C:\Users\userX\PycharmProjects\PegabaseFilter\venv\Scripts\python.exe
>C:/Users/userX/pycharm项目/PegabaseFilter/test_2.py
>[,对象位于0x00000000032A8A90>,0x00000000032DF048>,
>,对象位于0x00000000032DF208>,0x0000000003251BA8>]{“U sa_实例_状态”:
> ,
>'name':u'Pizza Palace','id':1}{'u sa_实例_state':
> ,
>'name':u'Pizza Palace','id':2}{'u sa_实例_state':
> ,
>'name':u'Pizza Palace','id':3}{'u sa_实例_state':
> ,
>'name':u'Pizza Palace_userX','id':4}{“u sa_实例_state':
> ,
>'name':u'Pizza Palace\u userX','id':5}{“u sa\u实例\u状态”:
> ,
>'name':u'Pizza Palace_userX','id':6}{“u sa_实例_state':
> ,
>'name':u'Pizza Palace_userX','id':7}
Base.metadata.create_all(引擎)这不仅会创建模式,还会创建所有对象、关系、属性这都是一个愚蠢的错误。在创建表之前初始化引擎是罪魁祸首。在我移动了文件底部的那两行代码之后。它终于跑了。引擎和设置元数据应在创建表后进行。我运行了该文件并创建了数据库,因为我可以在文件夹中看到数据库文件,之后我运行了accessdatabase.py,但仍然出现相同的错误
sqlalchemy.exc.OperationalError:(由于查询调用的自动填充而引发的;如果使用过早地发生这种刷新),请考虑使用SeStudi.NoAutoFuffe块(SQLe3.3。操作错误)没有这样的表:餐厅[SQL:'插入餐厅(名称)值(?)] ](参数:(比萨饼宫))(此错误的背景为:http://sqlalche.me/e/e3q8)
这清楚地表明,模式中缺少该表,您是否尝试将两个程序合并到一个中并运行?如果这样做,您将获得什么输出?没有成功。我还将所有代码编译到一个python文件中并运行了它。数据库文件仍然存在同样的错误,但我无法在其中输入任何数据。问题已解决@abhinaya devarajan。感谢您的时间。我在类之前初始化引擎是一个愚蠢的错误。db中是否存在表?我认为创建了一个空数据库,但我在代码中明确创建了一个表,所以为什么会出现问题。