> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# مثال عملي لعميل بايثون للاتصال بخدمة ClickHouse Cloud

> تعرّف على كيفية الاتصال بخدمة ClickHouse Cloud باستخدام بايثون من خلال مثال إرشادي خطوة بخطوة يعتمد على برنامج التشغيل clickhouse-connect.

{frontMatter.description}

هذا مثالٌ خطوة بخطوة يوضح كيفية البدء في استخدام بايثون مع خدمة ClickHouse Cloud.

<Note>
  ضع في اعتبارك أن إصدارات بايثون وتبعيات المكتبات تتطور باستمرار. وتأكد أيضًا من استخدام أحدث الإصدارات المدعومة لكلٍّ من برنامج التشغيل وبيئة بايثون عند تجربة ذلك.

  وقت كتابة هذه المقالة، نستخدم برنامج التشغيل [clickhouse-connect](https://github.com/ClickHouse/clickhouse-connect) بالإصدار `0.5.23` وبايثون `3.11.2` على التوالي.
</Note>

<div id="steps">
  ## الخطوات
</div>

1. تحقّق من إصدار بايثون:

```
$  python -V
Python 3.11.2
```

2. سننشئ المشروع في مجلد باسم `ch-python`:

```
$ mkdir ch-python
$ cd ch-python
```

3. أنشئ ملفًا للتبعيات باسم `requirements.txt` يتضمن:

```
clickhouse-connect==0.5.23
```

4. أنشئ ملفًا مصدرًا بلغة بايثون باسم `main.py`:

```py theme={null}
import clickhouse_connect
import sys
import json

CLICKHOUSE_CLOUD_HOSTNAME = 'HOSTNAME.clickhouse.cloud'
CLICKHOUSE_CLOUD_USER = 'default'
CLICKHOUSE_CLOUD_PASSWORD = 'YOUR_SECRET_PASSWORD'

client = clickhouse_connect.get_client(
    host=CLICKHOUSE_CLOUD_HOSTNAME, port=8443, username=CLICKHOUSE_CLOUD_USER, password=CLICKHOUSE_CLOUD_PASSWORD)

print("connected to " + CLICKHOUSE_CLOUD_HOSTNAME + "\n")
client.command(
    'CREATE TABLE IF NOT EXISTS new_table (key UInt32, value String, metric Float64) ENGINE MergeTree ORDER BY key')

print("table new_table created or exists already!\n")

row1 = [1000, 'String Value 1000', 5.233]
row2 = [2000, 'String Value 2000', -107.04]
data = [row1, row2]
client.insert('new_table', data, column_names=['key', 'value', 'metric'])

print("written 2 rows to table new_table\n")

QUERY = "SELECT max(key), avg(metric) FROM new_table"

result = client.query(QUERY)

sys.stdout.write("query: ["+QUERY + "] returns:\n\n")
print(result.result_rows)
```

5. أنشئ البيئة الافتراضية:

```
chpython$ python -m venv venv
```

6. فعِّل البيئة الافتراضية:

```
chpython$ source venv/bin/activate
```

بمجرد تحميله، يُفترض أن يظهر ‎(venv)‎ في بداية موجّه الطرفية لديك، ثم ثبّت التبعيات:

```
(venv) ➜  chpython$ pip install -r requirements.txt
Collecting certifi
  Using cached certifi-2023.5.7-py3-none-any.whl (156 kB)
Collecting urllib3>=1.26
  Using cached urllib3-2.0.2-py3-none-any.whl (123 kB)
Collecting pytz
  Using cached pytz-2023.3-py2.py3-none-any.whl (502 kB)
Collecting zstandard
  Using cached zstandard-0.21.0-cp311-cp311-macosx_11_0_arm64.whl (364 kB)
Collecting lz4
  Using cached lz4-4.3.2-cp311-cp311-macosx_11_0_arm64.whl (212 kB)
Installing collected packages: pytz, zstandard, urllib3, lz4, certifi, clickhouse-connect
Successfully installed certifi-2023.5.7 clickhouse-connect-0.5.23 lz4-4.3.2 pytz-2023.3 urllib3-2.0.2 zstandard-0.21.0
```

7. شغِّل الكود!

```
(venv) chpython$ venv/bin/python main.py

connected to HOSTNAME.clickhouse.cloud

table new_table created or exists already!

written 2 rows to table new_table

query: [SELECT max(key), avg(metric) FROM new_table] returns:

[(2000, -50.9035)]
```

<Tip>
  إذا كنت تستخدم إصدارًا أقدم من بايثون (مثل `3.9.6`)، فقد يظهر لك الخطأ `ImportError` المرتبط بمكتبة `urllib3`.
  في هذه الحالة، إمّا أن ترقي بيئة بايثون لديك إلى إصدار أحدث، أو أن تثبّت إصدار `urllib3` على `1.26.15` في ملف `requirements.txt`.
</Tip>
