标签: sqlalchemy

AttributeError:“OptionEngine”对象没有属性“execute”

SQLAlchemy v2.0.0 以不同的方式工作 - 他们改变了一些 api。

经过调查我找到了解决方案。我的代码很简单:

s_settings_df = pd.read_sql_query(query, engine_cloud)
Run Code Online (Sandbox Code Playgroud)

像标题这样的错误“AttributeError: 'OptionEngine' object has no attribute 'execute'”

我将在下面回答我自己的帖子。

我尝试使用各种版本,但不喜欢与历史组件锁定的想法。

python sqlalchemy pandas

28
推荐指数
1
解决办法
3万
查看次数

如何从SQLAlchemy映射对象中发现表属性

我有一个用表映射的类,在我的例子中是以声明的方式,我想从这个类中"发现"表属性,列,名称,关系:

engine = create_engine('sqlite:///' + databasePath, echo=True)

# setting up root class for declarative declaration
Base = declarative_base(bind=engine)

class Ship(Base):
    __tablename__ = 'ships'

    id = Column(Integer, primary_key=True)
    name = Column(String(255))

    def __init__(self, name):
            self.name = name

    def __repr__(self):
            return "<Ship('%s')>" % (self.name)
Run Code Online (Sandbox Code Playgroud)

所以现在我的目标是从"Ship"类中获取另一段代码中的表列及其属性.我想我可以使用检测来处理它,但SQLAlchemy API是否提供了任何方法?

python sqlite instrumentation sqlalchemy

27
推荐指数
1
解决办法
2万
查看次数

SQLAlchemy查询列包含子字符串的位置

我正在使用SQLAlchemy和SQLite3构建一个查询,我想在其中选择一个String列包含特定子字符串的行.完成此任务的最佳方法是什么?

python sqlite sqlalchemy

27
推荐指数
4
解决办法
4万
查看次数

多线程sqlalchemy webapp中推荐的scoped_session使用模式是什么?

我正在用python和sqlalchemy-0.7编写一个应用程序.它首先初始化sqlalchemy orm(使用声明),然后启动多线程Web服务器 - 我目前正在使用web.py进行快速原型设计,但将来可能会发生变化.我还将为预定作业添加其他"线程"等等,可能使用其他python线程.

从SA文档我明白我必须使用scoped_session()来获得线程本地会话,所以我的web.py应用程序最终应该看起来像:

import web
from myapp.model import Session  # scoped_session(sessionmaker(bind=engine))
from myapp.model import This, That, AndSoOn
urls = blah...
app  = web.application(urls, globals())

class index:
    def GET(self):
        s = Session()
        # get stuff done
        Session().remove()
        return(stuff)

class foo:
    def GET(self):
        s = Session()
        # get stuff done
        Session().remove()
        return(stuff)
Run Code Online (Sandbox Code Playgroud)

这是处理会话的正确方法吗?

据我所知,我应该在每个方法都得到一个scoped_session,因为它会给我一个我事先无法获得的线程本地会话(比如在模块级别).

此外,我应该在每个方法结束时调用.remove()或.commit()或类似的东西,否则会话仍将包含Persistent对象,我将无法查询/访问其他线程中的相同对象?

如果那个模式是正确的,那么通过只编写一次,也许使用装饰器可能会使它变得更好?这样的装饰器可以获取会话,调用方法然后确保正确地处理会话.如何将会话传递给装饰函数?

python session multithreading sqlalchemy

27
推荐指数
1
解决办法
2万
查看次数

sqlalchemy ORM:如何声明包含多列主键的表类?

主键的列必须按特定顺序排列.

我从文档中看到一些代码:

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer)

    __mapper_args__ = {
        'primary_key':[id]
    }
Run Code Online (Sandbox Code Playgroud)

但它只是不起作用(我使用的是mysql,并且不会生成id主键).任何可能的解决方

python sqlalchemy

27
推荐指数
1
解决办法
2万
查看次数

SQLAlchemy无法找到类名

简化,我有以下类结构(在单个文件中):

Base = declarative_base()

class Item(Base):
    __tablename__ = 'item'
    id = Column(BigInteger, primary_key=True)
    # ... skip other attrs ...

 class Auction(Base):
     __tablename__ = 'auction'
     id = Column(BigInteger, primary_key=True)
     # ... skipped ...
     item_id = Column('item', BigInteger, ForeignKey('item.id'))

     item = relationship('Item', backref='auctions')
Run Code Online (Sandbox Code Playgroud)

我从这里得到以下错误:

sqlalchemy.exc.InvalidRequestError
InvalidRequestError: When initializing mapper Mapper|Auction|auction, expression
    'Item' failed to locate a name ("name 'Item' is not defined"). If this is a
    class name, consider adding this relationship() to the Auction class after
    both dependent classes have been …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy relationships pyramid

27
推荐指数
5
解决办法
1万
查看次数

最接近于SQLAlchemy for Java/Scala

作为一个不熟悉Python的人,我经常听到很多赞美SQLAlchemy.所以我想明白:

  1. 与"类型安全的SQL构建器"(如jOOQQueryDSL)相比,它提供了什么?

  2. Java(或Scala)世界中是否有更接近的等价物?我见过Apache Empire-DB在这方面提到过......

java orm scala sqlalchemy relational-database

27
推荐指数
4
解决办法
8294
查看次数

sqlalchemy:'InstrumentedList'对象没有属性'filter'

我有以下3个班级:

class Resource:
    id = Column(Integer, primary_key=True)
    path = Column(Text)
    data = Column(Binary)
    type = Column(Text)

    def set_resource(self, path, data, type):
        self.path = path
        self.data = data
        self.type = type

class EnvironmentResource(Base, Resource):
    __tablename__ = 'environment_resources'
    parent_id = Column(Integer, ForeignKey('environments.id', ondelete='CASCADE'))
    def __init__(self, path, data, type):
        self.set_resource(path, data, type)

class Environment(Base):
    __tablename__ = 'environments'
    id = Column(Integer, primary_key=True)
    identifier = Column(Text, unique=True)
    name = Column(Text)
    description = Column(Text)

    _resources = relationship("EnvironmentResource",
        cascade="all, delete-orphan",
        passive_deletes=True)
    _tools = relationship("Tool",
        cascade="all, delete-orphan",
        passive_deletes=True) …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

27
推荐指数
1
解决办法
2万
查看次数

SqlAlchemy和Flask,如何查询多对多关系

我需要帮助创建SqlAlchemy查询.

我正在做一个Flask项目,我正在使用SqlAlchemy.我在models.py文件中创建了3个表:Restaurant,Dish和restaurant_dish.

restaurant_dish = db.Table('restaurant_dish',
    db.Column('dish_id', db.Integer, db.ForeignKey('dish.id')),
    db.Column('restaurant_id', db.Integer, db.ForeignKey('restaurant.id'))
)

class Restaurant(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), index = True)

    restaurant_dish = db.relationship('Dish', secondary=restaurant_dish,
        backref=db.backref('dishes', lazy='dynamic'))


class Dish(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), index = True)
    info = db.Column(db.String(256), index = True)
Run Code Online (Sandbox Code Playgroud)

我已将数据添加到restaurant_dish表中,它应该正常工作.我需要帮助的地方是了解如何使用餐厅正确获取菜肴.原始SQL将是这样的:

SELECT dish_id FROM restaurant_dish WHERE restaurant_id == id
Run Code Online (Sandbox Code Playgroud)

我设法完成但没有工作:

x = Restaurant.query.filter_by(Restaurant.restaurant_dish.contains(name)).all()
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,我也非常感谢教程可以指向正确的方向(官方文档在我的脑海中).

python sql many-to-many sqlalchemy flask

27
推荐指数
1
解决办法
2万
查看次数

27
推荐指数
1
解决办法
2万
查看次数