Files
supabase-connector/example.py
Тимур Абайдулин a23c88f5b9 Initial commit
2025-11-26 07:18:11 +03:00

241 lines
7.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Примеры использования SupabaseManager
"""
from supabase import SupabaseManager
def example_select():
"""Пример выборки данных из таблицы"""
print("\n=== Пример SELECT ===")
sb = SupabaseManager()
# Получить все записи
all_users = sb.select(table="users")
print(f"Всего пользователей: {len(all_users)}")
# Получить с фильтром
filtered_users = sb.select(
table="users",
filters={"age": 30}
)
print(f"Пользователей с возрастом 30: {len(filtered_users)}")
# Получить с лимитом
limited_users = sb.select(
table="users",
limit=5
)
print(f"Первые 5 пользователей: {len(limited_users)}")
# Выбрать только определенные колонки
names_only = sb.select(
table="users",
columns="id, name"
)
for user in names_only:
print(f" - {user.get('name')} (ID: {user.get('id')})")
def example_insert():
"""Пример добавления новой записи"""
print("\n=== Пример INSERT ===")
sb = SupabaseManager()
new_user = {
"name": "Тимур Иванов",
"email": f"timur_{hash('test')}@example.com",
"age": 28
}
result = sb.insert(table="users", data=new_user)
if result:
print(f"Создан пользователь: {result.get('name')} с ID {result.get('id')}")
else:
print("Ошибка при создании пользователя")
def example_update():
"""Пример обновления записи"""
print("\n=== Пример UPDATE ===")
sb = SupabaseManager()
# Сначала получим ID первого пользователя
users = sb.select(table="users", limit=1)
if users:
user_id = users[0].get('id')
# Обновим возраст
updated = sb.update(
table="users",
data={"age": 31},
filters={"id": user_id}
)
if updated:
print(f"Обновлен пользователь ID {user_id}: {updated[0]}")
else:
print("Нет пользователей для обновления")
def example_delete():
"""Пример удаления записи"""
print("\n=== Пример DELETE ===")
sb = SupabaseManager()
# Получим последнюю запись
users = sb.select(table="users")
if users:
last_user = users[-1]
user_id = last_user.get('id')
print(f"Удаляем пользователя: {last_user.get('name')} (ID: {user_id})")
deleted = sb.delete(
table="users",
filters={"id": user_id}
)
if deleted:
print(f"✅ Пользователь удален")
else:
print("Нет пользователей для удаления")
def example_complex_query():
"""Пример работы с прямым клиентом Supabase для сложных запросов"""
print("\n=== Пример сложных запросов ===")
sb = SupabaseManager()
client = sb.get_client()
# Использование операторов сравнения
adults = client.table("users")\
.select("*")\
.gte("age", 18)\
.execute()
print(f"Взрослых пользователей (18+): {len(adults.data)}")
# Поиск по паттерну (LIKE)
ivan_users = client.table("users")\
.select("*")\
.ilike("name", "%иван%")\
.execute()
print(f"Пользователей с 'иван' в имени: {len(ivan_users.data)}")
# Сортировка
sorted_users = client.table("users")\
.select("*")\
.order("age", desc=True)\
.limit(3)\
.execute()
print("Топ-3 самых старших пользователей:")
for user in sorted_users.data:
print(f" - {user.get('name')}, {user.get('age')} лет")
def example_storage():
"""Пример работы с Storage (загрузка файлов)"""
print("\n=== Пример работы с Storage ===")
sb = SupabaseManager()
# Создадим тестовый текстовый файл
test_content = "Это тестовый файл для демонстрации работы с Supabase Storage"
file_data = test_content.encode('utf-8')
# Загрузим файл
success = sb.upload_file(
bucket="test-bucket",
file_path="examples/test.txt",
file_data=file_data,
content_type="text/plain"
)
if success:
# Получим публичный URL
url = sb.get_public_url(
bucket="test-bucket",
file_path="examples/test.txt"
)
print(f"Файл доступен по URL: {url}")
else:
print("Ошибка при загрузке файла (проверьте, существует ли bucket 'test-bucket')")
def example_batch_operations():
"""Пример пакетных операций"""
print("\n=== Пример пакетных операций ===")
sb = SupabaseManager()
# Добавим несколько пользователей
users_to_add = [
{"name": "Алексей Петров", "email": f"alex_{i}@example.com", "age": 25 + i}
for i in range(3)
]
print(f"Добавляем {len(users_to_add)} пользователей...")
for user_data in users_to_add:
result = sb.insert(table="users", data=user_data)
if result:
print(f"{result.get('name')}")
def example_error_handling():
"""Пример обработки ошибок"""
print("\n=== Пример обработки ошибок ===")
try:
sb = SupabaseManager()
# Попытка запроса к несуществующей таблице
result = sb.select(table="nonexistent_table")
if not result:
print("⚠️ Таблица не существует или запрос вернул пустой результат")
except Exception as e:
print(f"❌ Произошла ошибка: {e}")
def main():
"""Запуск всех примеров"""
print("=" * 60)
print("Примеры использования SupabaseManager")
print("=" * 60)
try:
# Раскомментируйте нужные примеры
example_select()
# example_insert()
# example_update()
# example_delete()
# example_complex_query()
# example_storage()
# example_batch_operations()
# example_error_handling()
except ValueError as e:
print(f"\n❌ Ошибка инициализации: {e}")
print("\n💡 Убедитесь, что вы создали файл .env с переменными:")
print(" SUPABASE_URL=your_url")
print(" SUPABASE_KEY=your_key")
except Exception as e:
print(f"\n❌ Непредвиденная ошибка: {e}")
if __name__ == "__main__":
main()