Python 我能';不要仅仅从另一个位置查询任何东西

Python 我能';不要仅仅从另一个位置查询任何东西,python,sqlalchemy,Python,Sqlalchemy,这是我当前的目录: 我使用sqlachemy创建ORM,这是我的数据库设置文件: from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from sqlalchemy import create_engine Base = decla

这是我当前的目录:

我使用sqlachemy创建ORM,这是我的数据库设置文件:

from sqlalchemy import Column, ForeignKey, Integer, String

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import relationship

from sqlalchemy import create_engine

Base = declarative_base()

class Restaurant(Base):
    __tablename__ = 'restaurant'

    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)

class MenuItem(Base):
    __tablename__ = "menu_item"

    name =Column(String(80), nullable = False)
    id = Column(Integer, primary_key = True)
    description = Column(String(250))
    price = Column(String(8))
    course = Column(String(250))
    restaurant_id = Column(Integer, ForeignKey('restaurant.id'))
    restaurant = relationship(Restaurant)

    @property
    def serialize(self):
        return {
            'name': self.name,
            'description': self.description,
            'id': self.id,
            'price': self.price,
            'course': self.course
        }

engine = create_engine(
    'sqlite:///restaurantmenu.db')

Base.metadata.create_all(engine)
这是我的项目文件的顶部:

engine = create_engine('sqlite:///restaurantMenu.db')
DBSession = sessionmaker(bind = engine)
session = DBSession()
在“restaurantmenu.db”文件所在的当前目录中,我可以使用session.query()查询餐厅和菜单项。我得到了我想要的所有数据,它们不是空的

>>> from database_setup import Restaurant, MenuItem
>>> from project import session
>>> session.query(Restaurant).all()
[<database_setup.Restaurant object at 0x7fc7bc2ce0d0>, <database_setup.Restaurant object at 0x7fc7bc2ce150>, <database_setup.Restaurant object at 0x7fc7bc2ce1d0>, <database_setup.Restaurant object at 0x7fc7bc2ce290>, <database_setup.Restaurant object at 0x7fc7bc2ce350>, <database_setup.Restaurant object at 0x7fc7bc2ce410>, <database_setup.Restaurant object at 0x7fc7bc2ce4d0>, <database_setup.Restaurant object at 0x7fc7bc2ce590>, <database_setup.Restaurant object at 0x7fc7bc2ce650>]
>>> session.query(MenuItem).all()
[<database_setup.MenuItem object at 0x7fc7bc2df150>, <database_setup.MenuItem object at 0x7fc7bc2df1d0>, <database_setup.MenuItem object at 0x7fc7bc2df250>, <database_setup.MenuItem object at 0x7fc7bc2df310>, 
>>来自数据库\u设置导入餐厅,菜单项
>>>从项目导入会话
>>>session.query(餐厅).all()
[, , , , ]
>>>session.query(MenuItem.all)()
[, , 
但是当我想在另一个地方(不是我的当前目录)使用“session.query()”时,“session.query(Restaurant)”是可以的,但是“session.query(MenuItem)”是空的。我不明白为什么。 MenuItem是否存在依赖关系

>>> import sys
>>> sys.path.append('../restaurant')
>>> from database_setup import Restaurant, MenuItem
>>> from project import session
>>> session.query(Restaurant).all()
[<database_setup.Restaurant object at 0x7fd3e921ff50>, <database_setup.Restaurant object at 0x7fd3e921ffd0>, <database_setup.Restaurant object at 0x7fd3e9241090>, <database_setup.Restaurant object at 0x7fd3e9241150>, <database_setup.Restaurant object at 0x7fd3e9241210>, <database_setup.Restaurant object at 0x7fd3e92412d0>, <database_setup.Restaurant object at 0x7fd3e9241390>, <database_setup.Restaurant object at 0x7fd3e9241450>, <database_setup.Restaurant object at 0x7fd3e9241510>, <database_setup.Restaurant object at 0x7fd3e92415d0>, <database_setup.Restaurant object at 0x7fd3e9241690>, <database_setup.Restaurant object at 0x7fd3e9241750>]
>>> session.query(MenuItem).all()
[]
导入系统 >>>sys.path.append(“../restaurant”) >>>从数据库\u设置导入餐厅,菜单项 >>>从项目导入会话 >>>session.query(餐厅).all() [, , , , , , ] >>>session.query(MenuItem.all)() []
这并不能完全解决您的问题(您在DB URL中使用的是相对路径),但这里提供的解决方案:也适用于您。无法说明为什么其他位置保存包含餐厅的DB文件。谢谢。如果我在项目文件中使用绝对URL,我会成功查询菜单项。我认为问题在于,如果我尝试使用相对路径,我只会在其他位置创建一个新的restaurantMenu.DB。