Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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 找不到SQLAlchemy错误表_Python_Sqlalchemy - Fatal编程技术网

Python 找不到SQLAlchemy错误表

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

我不熟悉使用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)

请运行
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中是否存在表?我认为创建了一个空数据库,但我在代码中明确创建了一个表,所以为什么会出现问题。