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'”
我将在下面回答我自己的帖子。
我尝试使用各种版本,但不喜欢与历史组件锁定的想法。
我有一个用表映射的类,在我的例子中是以声明的方式,我想从这个类中"发现"表属性,列,名称,关系:
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是否提供了任何方法?
我正在使用SQLAlchemy和SQLite3构建一个查询,我想在其中选择一个String列包含特定子字符串的行.完成此任务的最佳方法是什么?
我正在用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对象,我将无法查询/访问其他线程中的相同对象?
如果那个模式是正确的,那么通过只编写一次,也许使用装饰器可能会使它变得更好?这样的装饰器可以获取会话,调用方法然后确保正确地处理会话.如何将会话传递给装饰函数?
主键的列必须按特定顺序排列.
我从文档中看到一些代码:
class User(Base):
__tablename__ = 'users'
id = Column(Integer)
__mapper_args__ = {
'primary_key':[id]
}
Run Code Online (Sandbox Code Playgroud)
但它只是不起作用(我使用的是mysql,并且不会生成id主键).任何可能的解决方
简化,我有以下类结构(在单个文件中):
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.所以我想明白:
Java(或Scala)世界中是否有更接近的等价物?我见过Apache Empire-DB在这方面提到过......
我有以下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) 我需要帮助创建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)
感谢您的帮助,我也非常感谢教程可以指向正确的方向(官方文档在我的脑海中).
SQLAlchemy one和first方法之间有什么区别