标签: sqlsoup

如何在SQLAlchemy或SqlSoup ORM中自动反映表关系?

如何告诉SQLAlchemy自动将基本外键引用反映为对其他ORM对象的引用而不是整数字段?

SQLAlchemy和它的SqlSoup中,表列都会自动反映,并且可以手动定义关系:

class User(Base):
    __table__ = metadata.tables['users']
    loan = relation(Loans)
Run Code Online (Sandbox Code Playgroud)

...

You can define relationships on SqlSoup classes:
>>> db.users.relate('loans', db.loans)
Run Code Online (Sandbox Code Playgroud)

sql orm sqlalchemy foreign-keys sqlsoup

6
推荐指数
1
解决办法
1300
查看次数

如何将 TIMESTAMPDIFF 添加到 SqlSoup 查询?

我有一个运行和使用 SqlSoup 的报告程序,并且现在通过 SqlSoup 调用生成了整个查询,除了 MySqL Function TIMESTAMPDIFF

实际的 SQL 短语应该是

TIMESTAMPDIFF(PERIOD, start_time, end_time) <= 60
Run Code Online (Sandbox Code Playgroud)

我试过

from sqlalchemy.sql.expression import func
Run Code Online (Sandbox Code Playgroud)

和 where-clause 短语(rc引用数据库和表)

where = and_(where, func.TIMESTAMPDIFF('PERIOD',rc.start_time,rc.end_time) <= 60)
Run Code Online (Sandbox Code Playgroud)

这会编译,但登录后会显示PERIODas%sPERIOD 下面的参数,这似乎不起作用。

使用 SqlSoup 执行此操作的任何想法?

python sqlalchemy sqlsoup

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

SQLAlchemy / SQLSoup 在 MySQL 中看不到临时表

我继承了 SQLQlchemy / SQLSoup 应用程序,需要将其扩展 20 倍。

一个查询运行得非常慢,所以我重构了它。由于MySQL在嵌套子查询/派生表上的性能较差,我将其分成两个临时表并将它们连接起来。

现在我尝试将 SQL 添加到代码中,但是当我尝试访问临时表时,收到一条错误消息,指出该表不存在。

db.execute("""DROP TABLE IF  EXISTS next_requests""") ;
db.execute("""
        CREATE TEMPORARY TABLE next_requests
                (INDEX request_id_index (cirId)) 
        SELECT DISTINCT 
            cr.uuid             AS cirId,
            ....")

db.execute("SELECT * FROM next_requests")
Run Code Online (Sandbox Code Playgroud)

现在我收到错误:

ProgrammingError: (ProgrammingError) (1146, "Table 'SAST.next_requests' (doesn't exist") 
Run Code Online (Sandbox Code Playgroud)

我认为这是因为会话正在关闭并在查询之间重新操作,或者类似的原因。

数据库连接如下。

ENGINE = create_engine(settings.dbString, pool_recycle=1800, pool_size=5)
SESSION = scoped_session(sessionmaker(autoflush=True,\
    expire_on_commit=False, autocommit=True))
SQLSOUP_DB = sqlsoup.SQLSoup(ENGINE, session=SESSION)
Run Code Online (Sandbox Code Playgroud)

(SQLSOUP_DB 是 db.execute 中使用的数据库)。

我需要做什么才能保持会话打开,以便我仍然可以使用临时表。或者可能是其他原因导致了这个问题?

python mysql sqlalchemy temp-tables sqlsoup

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

如何使用sqlsoup插入字典

我正在尝试使用 sqlsoup 插入字典。不幸的是,这不起作用:

db.blah_table.insert({"blah_field" : "blah_value"})
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误

TypeError: insert() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)

sqlsoup 的更新工作正常。我真的不想把它分解成

db.blah_table.insert(blah_field = "blah_value")
Run Code Online (Sandbox Code Playgroud)

这也有效。帮助!

python dictionary sqlalchemy sqlsoup

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

标签 统计

sqlalchemy ×4

sqlsoup ×4

python ×3

dictionary ×1

foreign-keys ×1

mysql ×1

orm ×1

sql ×1

temp-tables ×1