С помощью этого модуля в проекте можно более удобно выполнять асинхронные операции с данными 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')
# Одна таблица
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()
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()
...
# Одна таблица
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 )