相关疑难解决方法(0)

Sqlalchemy - 如何从带有绑定参数的insert(),update()语句中获取原始sql?

例:

from sqlalchemy.dialects import mysql
from sqlalchemy import Integer, Column, update, insert
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Test(Base):
    __tablename__ = "test"

    a = Column(Integer, primary_key=True)
    b = Column(Integer)


update_stmt = update(Test).where(Test.a == 1).values(b=2)
print update_stmt.compile(dialect=mysql.dialect(), compile_kwargs=  {"literal_binds": True})

insert_stmt = insert(Test).values(a=1, b=1)
print insert_stmt.compile(dialect=mysql.dialect())
Run Code Online (Sandbox Code Playgroud)

结果是:

UPDATE test SET b=%s WHERE test.a = %s
INSERT INTO test (a, b) VALUES (%s, %s)
Run Code Online (Sandbox Code Playgroud)

问题是如何让sqlalchemy像这样生成smth:

UPDATE test SET b=2 WHERE test.a = 1
INSERT INTO test (a, b) VALUES (1, …
Run Code Online (Sandbox Code Playgroud)

python orm sqlalchemy

11
推荐指数
1
解决办法
3895
查看次数

SQLAlchemy要求查询使用别名,但该别名未在生成的SQL中使用

我有一个简单的模型类,代表两个角色之间的战斗:

class WaifuPickBattle(db.Model):
    """Table which represents a where one girl is chosen as a waifu."""

    __tablename__ = "waifu_battles"
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
    date = db.Column(db.DateTime, nullable=False)
    winner_name = db.Column(db.String, nullable=False)
    loser_name = db.Column(db.String, nullable=False)
Run Code Online (Sandbox Code Playgroud)

我有一种构造CTE的方法,该CTE将战斗投射为一系列出场(每场战斗都有两次出场-胜利者和失败者):

def get_battle_appearences_cte():
    """Create a sqlalchemy subquery of the battle appearences."""
    wins = select([
        WaifuPickBattle.date,
        WaifuPickBattle.winner_name.label("name"),
        expression.literal_column("1").label("was_winner"),
        expression.literal_column("0").label("was_loser")
    ])
    losses = select([
        WaifuPickBattle.date,
        WaifuPickBattle.loser_name.label("name"),
        expression.literal_column("0").label("was_winner"),
        expression.literal_column("1").label("was_loser")
    ])
    return wins.union_all(losses).cte("battle_appearence")
Run Code Online (Sandbox Code Playgroud)

然后,我有了一个查询,该查询利用此视图来确定战斗最多的角色:

def query_most_battled_waifus():
    """Find the waifus with the most battles in a …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

10
推荐指数
1
解决办法
339
查看次数

使用 SQLAlchemy 进行日期时间过滤不起作用

基本上,我需要构建一个函数,该函数将根据给定日期过滤查询并返回一个新查询。我是 SQLAlchemy 的新手,我查找了类似的问题,但仍然遇到相同的错误:

`Don't know how to literal-quote value datetime.datetime(2018, 1, 1, 8, 3, 1, 438278)`
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

def filter_dates(query_obj, datecols, start = None, end = None):
        if end is None:
            end = datetime.datetime.now()
        if start is None:
            start = end - datetime.timedelta(weeks=12)
        print("%s to %s" % (start, end))
        for datecol in datecols:
            print("Filtrando datas!")
            query_obj = query_obj.filter(datecol >= start)
            query_obj = query_obj.filter(datecol <= end)
            ReevTable.print_query(query_obj)
        return query_obj
Run Code Online (Sandbox Code Playgroud)

datecols 是一个 orm.attributes 对象。假设我有一个名为对象UserDatetime指定的属性created_at。这是预期的行为:

query = session.query(Company.name, …
Run Code Online (Sandbox Code Playgroud)

python datetime sqlalchemy

7
推荐指数
1
解决办法
2666
查看次数

使用sqlalchemy有效地插入字典列表

我有一个包含字典作为元素的列表.所有字典都面对我的模式,是否有一种简单有效的方法可以在sqlalchemy中将这些细节插入到db中?

我的名单如下

[{id:'12',name:'a':lang:'eng},{id:'13',name:'b':lang:'eng},{id:'14',name:'c':lang:'eng}]
Run Code Online (Sandbox Code Playgroud)

我正在下面给出一个模式

id String(10)
name String(10)
lang String(10)
Run Code Online (Sandbox Code Playgroud)

python dictionary sqlalchemy

5
推荐指数
2
解决办法
6396
查看次数

如何打印实际 SQLAlchemy 查询以进行故障排除:SQLAlchemy 过滤语句将过滤条件替换为 %(column_name_1)s

我有一个 SQLAlchemy 查询,如下所示:

query = db.session.query(
    Place.name,
    Place.population,
).filter(Place.population==8000)
Run Code Online (Sandbox Code Playgroud)

但是当我打印查询时,结果如下:

SELECT place.name AS place_name, place.population AS place_population
FROM place
WHERE place.population = %(population_1)s
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不断用 替换我的过滤条件%(population_1)s。这个查询是 Flask 应用程序的一部分,也许有什么我不明白的地方?

编辑:更改标题以更描述实际问题。

python sqlalchemy flask-sqlalchemy

-4
推荐指数
1
解决办法
5683
查看次数