1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/NightRavenReady-easy_tormysql

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

О

С помощью этого модуля в проекте можно более удобно выполнять асинхронные операции с данными MySQL. Модуль основан на вторичной обёртке TorMySQL и заимствует стиль кодирования моделей Django.

Поддерживает tornado и asyncio.

Установка

Python3: pip install easy_tormysql >=0.2

Python2: pip install easy_tormysql <0.2

Руководство

Инициализация соединения пула

from easy_tormysql import init_mysql
init_mysql(
    default={
        "max_connections": 20, #max open connections
        "idle_seconds": 7200, #conntion idle timeout time, 0 is not timeout
        "wait_connection_timeout": 3, #wait connection timeout
        "host": "127.0.0.1",
        "user": "root",
        "passwd": "root",
        "charset": "utf8",
        "db": "example1"
    },
    other_connection={
        "host": "127.0.0.1",
        "user": "root",
        "passwd": "root",
        "charset": "utf8",
        "db": "example2",
        """
            Система будет искать таблицу в базе данных по умолчанию. Если ваша таблица находится не в этой базе данных, укажите её в other_connection.tables.
        """,
        "tables": [
            "example_table_mapping_class_lowercase_name"
        ]
    }
)

Определение моделей

  • Одна таблица
from easy_tormysql import BaseModel, Field

class Subscriber(BaseModel):
    """
        Если не указано db_table, система будет использовать имя класса модели в нижнем регистре как имя таблицы.
    """
    db_table = 'tb_user'
    name = Field()
    
    create_time = Field(auto_now_add=True)

    login_time = Field(auto_now=True) 
  • Многотабличные отношения
from easy_tormysql import BaseModel, Field, ForeignKey, ManyToManyField

class Author(BaseModel):
    name = Field()

class Tag(BaseModel):
    name = Field()

class Article(BaseModel):
    content = Field()
    create_time = Field()
    
    # Один-ко-многим
    author = ForeignKey(Author)
    
    # Многие-ко-многим: требуется определение промежуточной таблицы
    tags = ManyToManyField(Tag, middle_table='article_tags')

Использование в tornado

  • Вставить операцию
# Одна таблица
author = Author(name='Wang')

# Один-к-многим
article = Article(content='My story...')
author.article_set.add(article)
yield author.save()

# Многие-ко-многим
tag1, tag2 = Tag(name='poetry'), Tag(name='biography')
yield tag1.save()
yield tag2.save()
article.tags.add(tag1)
article.tags.add(tag2)
yield article.save()
  • Операция запроса
# Запрос уникальной записи
author = yield Author.get(name='Wang')

# Запрос всех записей
articles = yield Article.all()

# Условный запрос
authors = yield Author.filter(name='Wang')
authors = yield Author.filter(name__in=('Wang','Lee'))
authors = yield Author.filter(name__contains='W')
articles = yield Author.filter(create_time__between=(date1,date2))

# Сортировка
sorted_authors = yield Author.all(order_fields=("name",))

# Группировка
records = yield Author.filter(name='Wang', group_fields=("name",))

# Один-ко-многим
articles = yield author.article_set.all()

# Многие-ко-многим
tags = yield article.tags.all()
articles = yield tag1.articles.all()
  • Модификация операции
article.content = "programming..."
yield article.save()
  • Удалить операцию
article.tags.remove(tag1)
article.tags.remove(tag2)
yield article.save()
yield article.delete()
  • Использование в RequestHandler
from tornado.web import RequestHandler
from tornado.gen import coroutine


class ExampleHandler(RequestHandler):

    @coroutine
    def get(self):
        ...
        # Одна таблица
        author = Author(name='Wang')
        
        # Один-ко-многим
        article = Article(content='My story...')
        author.article_set.add(article)
        yield author.save()
        ...

Использование в asyncio

  • Вставка операции
# Одна таблица
author = Author(name='Wang')

# Один-ко-многим
article = Article(content='My story...')
author.article_set.add(article)
await author.save()

# Многие-ко-многим
tag1, tag2 = Tag(name='poetry'), Tag(name='biography')
await tag1.save()
await tag2.save()
article.tags.add(tag1)
article.tags.add(tag2)
await article.save()
  • Операция запроса
# Запрос уникальной записи
author = await Author.get(name='Wang')

# Запрос всех записей
articles = await Article.all()

# Условный запрос
authors = await Author.filter(name='Wang')
authors = await Author.filter(name__in=('Wang','Lee'))
authors = await Author.filter(name__contains='W')
articles = await Author.filter(create_time__between=(date1,date2))

# Сортировка
sorted_authors = await Author.all(order_fields=("name",))

# Группировка
records = await Author.filter(name='Wang', group_fields=("name",))

# Один-ко-многим
articles = await author.article_set.all()

# Многие-ко-многим
tags = await article.tags.all()
articles = await tag1.articles.all()

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/NightRavenReady-easy_tormysql.git
git@api.gitlife.ru:oschina-mirror/NightRavenReady-easy_tormysql.git
oschina-mirror
NightRavenReady-easy_tormysql
NightRavenReady-easy_tormysql
master