{ "info": { "author": "NightRaven", "author_email": "1453878150@qq.com", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3" ], "description": "* ### About\r\nThis module provides a twice encapsulation of [TorMySql](https://pypi.org/project/TorMySQL/) based on [Django](https://pypi.org/project/Django/)'s code style.\r\n\r\nSupport [tornado](https://pypi.org/project/tornado/) and asyncio.\r\n* ### Installation\r\npython3 \r\n`pip install easy_tormysql >=0.2` \r\n\r\npython2 \r\n`pip install easy_tormysql <0.2` \r\n\r\n* ### Tutorial\r\n\r\n#### init pool\r\n```\r\nfrom easy_tormysql import init_mysql\r\ninit_mysql(\r\n default={\r\n \"max_connections\" : 20, #max open connections\r\n \"idle_seconds\" : 7200, #conntion idle timeout time, 0 is not timeout\r\n \"wait_connection_timeout\" : 3, #wait connection timeout\r\n \"host\": \"127.0.0.1\",\r\n \"user\": \"root\",\r\n \"passwd\": \"root\",\r\n \"charset\": \"utf8\",\r\n \"db\": \"example1\"\r\n },\r\n other_connection={\r\n \"host\": \"127.0.0.1\",\r\n \"user\": \"root\",\r\n \"passwd\": \"root\",\r\n \"charset\": \"utf8\",\r\n \"db\": \"example2\",\r\n \"\"\"\r\n treat all tables contain in default database(example1) automatically.\r\n you must define(use table-mapping class's lowercase name, not table's name) which tables contain in current database(example2) instead of default database.\r\n \"\"\"\r\n \"tables\": [\r\n \"example_table_mapping_class_lowercase_name\"\r\n ]\r\n }\r\n)\r\n```\r\n#### define models\r\n* single\r\n```\r\nfrom easy_tormysql import BaseModel, Field\r\n\r\nclass Subscriber(BaseModel):\r\n \"\"\"\r\n table-mapping class(User) map to table tb_user.\r\n if undefine db_table,map to table user(class's lowercase name)\r\n \"\"\"\r\n db_table = 'tb_user'\r\n name = Field()\r\n\r\n # auto_now_add: whether current colum set with now time when insert data.\r\n create_time = Field(auto_now_add=True)\r\n\r\n # auto_now_add: whether current colum set with now time when insert data.\r\n login_time = Field(auto_now=True) #auto_now: whether current colum set with now time when update data.\r\n```\r\n* relationship\r\n```\r\nfrom easy_tormysql import BaseModel, Field, ForeignKey, ManyToManyField\r\n\r\nclass Author(BaseModel):\r\n name = Field()\r\n\r\nclass Tag(BaseModel):\r\n name = Field()\r\n\r\nclass Article(BaseModel):\r\n content = Field()\r\n create_time = Field()\r\n\r\n # many-to-one relationship\r\n author = ForeignKey(Author)\r\n\r\n # many-to-many relationship: must define the middle table's name\r\n tags = ManyToManyField(Tag, middle_table='article_tags')\r\n```\r\n#### use tornado\r\n* insert\r\n```\r\n# single\r\nauthor = Author(name='Wang')\r\n\r\n# one-to-many\r\narticle = Article(content='My story...')\r\nauthor.article_set.add(article)\r\nyield author.save()\r\n\r\n# many-to-many\r\ntag1, tag2 = Tag(name='poetry'), Tag(name='biography')\r\nyield tag1.save()\r\nyield tag2.save()\r\narticle.tags.add(tag1)\r\narticle.tags.add(tag2)\r\nyield article.save()\r\n```\r\n* query\r\n```\r\n# query unique record\r\nauthor = yield Author.get(name='Wang')\r\n\r\n# query all record\r\narticles = yield Article.all()\r\n\r\n# query\r\nauthors = yield Author.filter(name='Wang')\r\nauthors = yield Author.filter(name__in=('Wang','Lee'))\r\nauthors = yield Author.filter(name__contains='W')\r\narticles = yield Author.filter(create_time__between=(date1,date2))\r\n\r\n# order by\r\nsorted_authors = yield Author.all(order_fields=(\"name\",))\r\n\r\n# group by\r\nrecords = yield Author.filter(name='Wang', group_fields=(\"name\",))\r\n\r\n# one-to-many\r\narticles = yield author.article_set.all()\r\n\r\n# many-to-many\r\ntags = yield article.tags.all()\r\narticles = yield tag1.articles.all()\r\n```\r\n* update\r\n```\r\narticle.content = \"programming...\"\r\nyield article.save()\r\n```\r\n* delete\r\n```\r\narticle.tags.remove(tag1)\r\narticle.tags.remove(tag2)\r\nyield article.save()\r\nyield article.delete()\r\n```\r\n* in RequestHandler\r\n```\r\nfrom tornado.web import RequestHandler\r\nfrom tornado.gen import coroutine\r\n\r\n\r\nclass ExampleHandler(RequestHandler):\r\n\r\n @coroutine\r\n def get(self):\r\n ...\r\n # single\r\n author = Author(name='Wang')\r\n\r\n # one-to-many\r\n article = Article(content='My story...')\r\n author.article_set.add(article)\r\n yield author.save()\r\n ...\r\n```\r\n#### use asyncio\r\n* insert\r\n```\r\n# single\r\nauthor = Author(name='Wang')\r\n\r\n# one-to-many\r\narticle = Article(content='My story...')\r\nauthor.article_set.add(article)\r\nawait author.save()\r\n\r\n# many-to-many\r\ntag1, tag2 = Tag(name='poetry'), Tag(name='biography')\r\nawait tag1.save()\r\nawait tag2.save()\r\narticle.tags.add(tag1)\r\narticle.tags.add(tag2)\r\nawait article.save()\r\n```\r\n* query\r\n```\r\n# query unique record\r\nauthor = await Author.get(name='Wang')\r\n\r\n# query all record\r\narticles = await Article.all()\r\n\r\n# query\r\nauthors = await Author.filter(name='Wang')\r\nauthors = await Author.filter(name__in=('Wang','Lee'))\r\nauthors = await Author.filter(name__contains='W')\r\narticles = await Author.filter(create_time__between=(date1,date2))\r\n\r\n# order by\r\nsorted_authors = await Author.all(order_fields=(\"name\",))\r\n\r\n# group by\r\nrecords = await Author.filter(name='Wang', group_fields=(\"name\",))\r\n\r\n# one-to-many\r\narticles = await author.article_set.all()\r\n\r\n# many-to-many\r\ntags = await article.tags.all()\r\narticles = await tag1.articles.all()\r\n```\r\n* update\r\n```\r\narticle.content = \"programming...\"\r\nawait article.save()\r\n```\r\n* delete\r\n```\r\narticle.tags.remove(tag1)\r\narticle.tags.remove(tag2)\r\nawait article.save()\r\nawait article.delete()\r\n```\r\n* in async function\r\n```\r\nimport asyncio\r\nasync def example():\r\n ...\r\n # single\r\n author = Author(name='Wang')\r\n\r\n # one-to-many\r\n article = Article(content='My story...')\r\n author.article_set.add(article)\r\n await author.save()\r\n ...\r\n\r\nioloop = asyncio.events.get_event_loop()\r\nioloop.run_until_complete(example())\r\n```\r\n\r\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/encodingForBetterWorld/easy_tormysql", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "easy-tormysql", "package_url": "https://pypi.org/project/easy-tormysql/", "platform": "", "project_url": "https://pypi.org/project/easy-tormysql/", "project_urls": { "Homepage": "https://github.com/encodingForBetterWorld/easy_tormysql" }, "release_url": "https://pypi.org/project/easy-tormysql/0.2.4/", "requires_dist": [ "tormysql (==0.4.0)" ], "requires_python": "", "summary": "This module provides a twice encapsulation of TorMySql based on Django's code style.", "version": "0.2.4" }, "last_serial": 4717624, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "d632c47dc5926af16e87b5ab8ca6709c", "sha256": "3019c88263a1b3ad2b93d21f84f1102f76a007b81c56fc087c1ea75826945079" }, "downloads": -1, "filename": "easy_tormysql-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "d632c47dc5926af16e87b5ab8ca6709c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13349, "upload_time": "2019-01-20T07:52:07", "url": "https://files.pythonhosted.org/packages/62/7a/f3785ef8fa9dc25958e0140b0eebc7ee6eedad44a7589378d33523e15c20/easy_tormysql-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f1a35cb89c1626f6aeb5a42ac03c70f5", "sha256": "0242643958f2d086b9aa1f521d025ba5e302ebe989dca737f069d9998a74d7aa" }, "downloads": -1, "filename": "easy_tormysql-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f1a35cb89c1626f6aeb5a42ac03c70f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8453, "upload_time": "2019-01-20T07:52:08", "url": "https://files.pythonhosted.org/packages/88/95/32b099a05b2fd0a7fe0ad581aed680b4dba3bfe49b07b48a6fc98254f1b8/easy_tormysql-0.1.2.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "0b04670133231c1b8d2cbc5fba5df655", "sha256": "7b404e6d32d77becca3500677b53bb3336e97cef7e7631a77a072f134a72d73b" }, "downloads": -1, "filename": "easy_tormysql-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "0b04670133231c1b8d2cbc5fba5df655", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13337, "upload_time": "2019-01-20T08:04:24", "url": "https://files.pythonhosted.org/packages/49/70/10a79b9b7ebd08605cb98e85cd4f7cb3d1fb43b688ff9cd869fbaed7a1c5/easy_tormysql-0.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f78ae963fd48d4cedb8547d6fa64baf4", "sha256": "dfd451ec3d7ac3000b2dae721272dcd9dfb420cc8488d7b8674462688a35aacb" }, "downloads": -1, "filename": "easy_tormysql-0.2.4.tar.gz", "has_sig": false, "md5_digest": "f78ae963fd48d4cedb8547d6fa64baf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8425, "upload_time": "2019-01-20T08:04:26", "url": "https://files.pythonhosted.org/packages/51/83/f34800951207819b9699edec3f262f07e57f1d4921d09e3e0fc157b8be8d/easy_tormysql-0.2.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0b04670133231c1b8d2cbc5fba5df655", "sha256": "7b404e6d32d77becca3500677b53bb3336e97cef7e7631a77a072f134a72d73b" }, "downloads": -1, "filename": "easy_tormysql-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "0b04670133231c1b8d2cbc5fba5df655", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13337, "upload_time": "2019-01-20T08:04:24", "url": "https://files.pythonhosted.org/packages/49/70/10a79b9b7ebd08605cb98e85cd4f7cb3d1fb43b688ff9cd869fbaed7a1c5/easy_tormysql-0.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f78ae963fd48d4cedb8547d6fa64baf4", "sha256": "dfd451ec3d7ac3000b2dae721272dcd9dfb420cc8488d7b8674462688a35aacb" }, "downloads": -1, "filename": "easy_tormysql-0.2.4.tar.gz", "has_sig": false, "md5_digest": "f78ae963fd48d4cedb8547d6fa64baf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8425, "upload_time": "2019-01-20T08:04:26", "url": "https://files.pythonhosted.org/packages/51/83/f34800951207819b9699edec3f262f07e57f1d4921d09e3e0fc157b8be8d/easy_tormysql-0.2.4.tar.gz" } ] }