You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python代码的ArangoDB AQL查询中使用DataFrame?

在AQL查询中使用Python DataFrame的正确方式

AQL是ArangoDB的原生查询语言,无法直接在AQL语句中调用Python的DataFrame对象。你需要通过以下两种常见方式实现需求:

方法1:将DataFrame数据导入ArangoDB集合后查询

如果你的DataFrame数据需要参与AQL的复杂计算,可以先把DataFrame的数据导入到ArangoDB的临时集合(或现有集合),再在AQL中直接查询该集合:

import pandas as pd
from arango import ArangoClient

# 初始化客户端和数据库
client = ArangoClient(hosts='http://localhost:8529')
db = client.db('your_database_name', username='your_username', password='your_password')

# 假设你的DataFrame是df,先创建临时集合
temp_col = db.create_collection('temp_df_collection', temporary=True)

# 将DataFrame数据转为字典列表,插入临时集合
temp_col.insert_many(df.to_dict('records'))

# 编写AQL查询,直接使用临时集合
cursor4 = db.aql.execute('''
    FOR d IN Transaction
    FILTER d._to IN (SELECT _key FROM temp_df_collection)
    COLLECT AGGREGATE
        length = COUNT_UNIQUE(d._id),
        totamnt = SUM(d.Amount),
        daysactive = COUNT_UNIQUE(DATE_TRUNC(d.Time, "day"))
    RETURN {
        "Incoming Accounts": length,
        "Days Active": LENGTH(daysactive),
        "Total Amount": totamnt
    }
''')

# 查询完成后可以删除临时集合(可选)
db.delete_collection('temp_df_collection')

方法2:提取DataFrame中的条件值,通过参数绑定传入AQL

如果只是需要用DataFrame中的某列值作为过滤条件,可以把该列的值提取为Python列表,通过AQL的参数绑定功能传入查询:

# 假设你的DataFrame中存储了需要匹配的_to值,提取为列表
target_to_values = df['your_to_column'].tolist()

# 使用参数绑定执行AQL,避免语法错误和安全风险
cursor4 = db.aql.execute('''
    FOR d IN Transaction
    FILTER d._to IN @target_values
    COLLECT AGGREGATE
        length = COUNT_UNIQUE(d._id),
        totamnt = SUM(d.Amount),
        daysactive = COUNT_UNIQUE(DATE_TRUNC(d.Time, "day"))
    RETURN {
        "Incoming Accounts": length,
        "Days Active": LENGTH(daysactive),
        "Total Amount": totamnt
    }
''', bind_vars={'target_values': target_to_values})

注意事项

  • 不要直接在AQL字符串中拼接Python变量(比如你原代码中的%df),这会直接导致语法错误,还可能引发安全风险。
  • 如果DataFrame数据量很大,优先选择方法1,避免因参数过多导致查询性能下降。

内容的提问来源于stack exchange,提问作者Chaitanya Srinevas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:40:26