241 lines
7.4 KiB
Python
241 lines
7.4 KiB
Python
"""
|
||
Примеры использования 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()
|