

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# openCypher 參數化查詢的範例
<a name="opencypher-parameterized-queries"></a>

Neptune 支援參數化的 openCypher 查詢。這可讓您搭配不同引數使用相同的查詢結構多次。由於查詢結構不會變更，因此 Neptune 可以快取其抽象語法樹 (AST)，而不必多次剖析它。

## 使用 HTTPS 端點的 openCypher 參數化查詢範例
<a name="opencypher-http-parameterized-queries"></a>

以下是搭配 Neptune openCypher HTTPS 端點使用參數化查詢的範例。查詢為：

```
MATCH (n {name: $name, age: $age})
RETURN n
```

參數定義如下：

```
parameters={"name": "john", "age": 20}
```

您可以提交參數化查詢，如下所示：

------
#### [ AWS CLI ]

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
  --open-cypher-query "MATCH (n {name: \$name, age: \$age}) RETURN n" \
  --parameters '{"name": "john", "age": 20}'
```

如需詳細資訊，請參閱《 AWS CLI 命令參考》中的 [execute-open-cypher-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html)。

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://{{your-neptune-endpoint}}:{{port}}',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

response = client.execute_open_cypher_query(
    openCypherQuery='MATCH (n {name: $name, age: $age}) RETURN n',
    parameters='{"name": "john", "age": 20}'
)

print(response['results'])
```

如需其他語言的 AWS SDK 範例，請參閱 [AWS 開發套件](access-graph-opencypher-sdk.md)。

------
#### [ awscurl ]

```
awscurl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
  --region {{us-east-1}} \
  --service neptune-db \
  -X POST \
  -d "query=MATCH (n {name: \$name, age: \$age}) RETURN n" \
  -d 'parameters={"name": "john", "age": 20}'
```

**注意**  
此範例假設您的 AWS 登入資料已在您的環境中設定。將 {{us-east-1}} 取代為 Neptune 叢集的區域。

------
#### [ curl ]

使用 `POST`：

```
curl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
  -d "query=MATCH (n {name: \$name, age: \$age}) RETURN n" \
  -d "parameters={\"name\": \"john\", \"age\": 20}"
```

使用 `GET`(URL 編碼）：

```
curl -X GET \
  "https://{{your-neptune-endpoint}}:{{port}}/openCypher?query=MATCH%20%28n%20%7Bname:\$name,age:\$age%7D%29%20RETURN%20n&parameters=%7B%22name%22:%22john%22,%22age%22:20%7D"
```

使用 `DIRECT POST`：

```
curl -H "Content-Type: application/opencypher" \
  "https://{{your-neptune-endpoint}}:{{port}}/openCypher?parameters=%7B%22name%22:%22john%22,%22age%22:20%7D" \
  -d "MATCH (n {name: \$name, age: \$age}) RETURN n"
```

------

## 使用 Bolt 進行 openCypher 參數化查詢的範例
<a name="opencypher-bolt-parameterized-queries"></a>

以下是使用 Bolt 通訊協定進行 OpenCypher 參數化查詢的 Python 範例：

```
from neo4j import GraphDatabase
uri = "bolt://[neptune-endpoint-url]:8182"
driver = GraphDatabase.driver(uri, auth=("", ""))

def match_name_and_age(tx, name, age):
  # Parameterized Query
  tx.run("MATCH (n {name: $name, age: $age}) RETURN n", name=name, age=age)

with driver.session() as session:
  # Parameters
  session.read_transaction(match_name_and_age, "john", 20)

driver.close()
```

以下是使用 Bolt 通訊協定進行 OpenCypher 參數化查詢的 Java 範例：

```
Driver driver = GraphDatabase.driver("bolt+s://{{(your cluster endpoint URL)}}:8182");
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("name", "john");
parameters.put("age", 20);
String queryString = "MATCH (n {name: $name, age: $age}) RETURN n";
Result result = driver.session().run(queryString, parameters);
```