{ "info": { "author": "stefanlei", "author_email": "stefanlei@qq.com", "bugtrack_url": null, "classifiers": [ "Operating System :: Microsoft :: Windows", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8" ], "description": "# mageia\n\n\n\n\n\nThis is a simple database tools for MySQL\n\n- Based on SQLAlchemy\n- Transaction-Safe\n- Friendly interface for developer\n- Use `:param` syntax bind param\n- Read/Write Splitting\n- Load Balance\n\n## Documentation\n\n```\npip install mageia\n```\n\n##### Usage (DB)\n\n```python\nfrom mageia.db import DB, create_engine, Dict\nurl = \"mysql+pymysql://root:password@localhost/info?charset=utf8\"\n\n# create a engine instance, and DB instance\nengine = create_engine(url)\ndb = DB(engine)\n```\n\n##### Query\n\n```python\n# return [dict-like,dict-like,dict-like,] or None\nuser_list = db.query(\"select * from user where id=:id\", id = 1)\nuser_list = db.query(\"select * from user where id in :id\", id = [1,2,3])\nuser = user_list[0]\nprint(user.id)\nprint(user.name)\n```\n\n##### Query One\n\n```python\n# return dict-like or None\ndb.query_one(\"select * from user where id=:id\", id = 1)\n```\n\n##### Query Page\n\n```python\n# return [dict-like,dict-like,dict-like,] or None\nuser = db.query_page(\"select * from user\", page=1, limit=10)\n```\n\n##### Insert\n\n```python\nJack = {\n \"name\":\"Jack\",\n \"age\":18,\n \"sex\":1\n}\ntable = \"user\"\n\n# Insert done, don't need commit\ndb.add(table, Jack)\n```\n\n##### Insert Many\n\n```python\nJack = {\n \"name\":\"Jack\",\n \"age\":18,\n \"sex\":1\n}\nTom = {\n \"name\":\"Tom\",\n \"age\":18,\n \"sex\":1\n}\ntable = \"user\"\ndb.add_many(table, [Tom,Jack])\n```\n\n##### Delete\n\n```python\ndata = db.query_one(\"select * from user where id = :id\", id=1)\n# Delete done, don't need commit, data must contain a primary key ,etc id .\ndb.delete(\"user\", data)\n```\n\n##### Merge\n\n```python\ndata = db.query_one(\"select * from user where id = :id\", id=1)\n# merge done, don't need commit, data must contain a primary key ,etc id .\ndata.name = \"stefanlei\"\ndb.merge(\"user\",data)\n```\n\n##### Merge many\n\n```python\nuser_list = db.query(\"select * from user where id in :ids\", ids=[1, 2, 3, 4, 5, 6, 7, 8])\n\nfor user in user_list:\n user.name = \"stefanlei\"\n\ndb.merge_many(\"user\", user_list)\n```\n\n##### Execute\n\n```python\n# return affected rows total\ndb.execute(\"delete from user where id = 1\")\ndb.execute(\"update user set age = 18 where age = :age\", age=16)\n```\n\n#### Transaction-Safe\n\nYou can also use `session` to keep `Transaction-Safe`\n\n```python\n# Use session to keep transaction-safe\nwith db.session() as s:\n db_user = s.query_one(\"select * from user\")\n s.delete(\"user\", db_user)\n\n user = Dict()\n user.name = \"stefan\"\n user.age = 18\n\n s.add(\"user\", user)\n```\n\n---\n\n\n\n##### Usage (ProxyDB)\n\n```python\nfrom mageia.proxy import ProxyDB\n\nsettings = {\n \"master\": \"mysql+pymysql://user:password@192.168.1.1/mageia?charset=utf8\",\n \"slave\": [\n {\n \"url\": \"mysql+pymysql://user:password@192.168.1.2/mageia?charset=utf8\",\n \"optional\": {\n \"weight\": 10\n }\n },\n {\n \"url\": \"mysql+pymysql://user:password@192.168.1.3/mageia?charset=utf8\",\n \"optional\": {\n \"weight\": 20\n }\n }\n ],\n}\n\ndb = ProxyDB(settings)\n```\n\n##### Write (master)\n\n```python\n# Use session to keep transaction-safe ,and execute in master\nwith db.session() as s:\n sql = \"select * from student\"\n user = s.query_one(sql)\n\n user.age = 18\n s.merge(\"student\", user)\n\n jack = {\n \"name\": \"Jack\",\n \"age\": 23\n }\n s.add(\"student\", jack)\n \n s.delete(\"student\", user)\n```\n\n##### read (slave)\n\n```python\n# Use session to keep transaction-safe ,and execute in slave\nwith db.session_slave() as s:\n sql = \"select * from student\"\n user = s.query_one(sql)\n \n user_list = s.query(sql)\n\n user_page = s.query_page(sql, page=1, limit=10)\n```\n\n##### Auto\n\n```python\ndb = ProxyDB(settings)\n\n# auto select master or slave\n\nsql = \"select * from student\"\nuser = db.query_one(sql)\n\nJack = {\n \"name\": \"Jack\",\n \"age\": 18\n}\ndb.add(\"student\", Jack)\n\ndb.delete(\"student\", user)\n```\n\n##### Load Balance\n\n```python\nfrom mageia.proxy import ProxyDB\nfrom mageia.loadbalance import WeightRandom\n\nsettings = {\n \"master\": \"mysql+pymysql://user:password@192.168.1.1/mageia?charset=utf8\",\n \"slave\": [\n {\n \"url\": \"mysql+pymysql://user:password@192.168.1.2/mageia?charset=utf8\",\n \"optional\": {\n \"weight\": 10\n }\n },\n {\n \"url\": \"mysql+pymysql://user:password@192.168.1.3/mageia?charset=utf8\",\n \"optional\": {\n \"weight\": 20\n }\n }\n ],\n}\n\n# Load Balance Policy\ndb = ProxyDB(settings, balance_class=WeightRandom)\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/stefanlei", "keywords": "", "license": "Apache", "maintainer": "", "maintainer_email": "", "name": "mageia", "package_url": "https://pypi.org/project/mageia/", "platform": "", "project_url": "https://pypi.org/project/mageia/", "project_urls": { "Homepage": "https://github.com/stefanlei" }, "release_url": "https://pypi.org/project/mageia/0.2.2/", "requires_dist": null, "requires_python": "", "summary": "Simple DataBase tools for MySQL . Read Write Splitting Load Balance .", "version": "0.2.2", "yanked": false, "yanked_reason": null }, "last_serial": 11117603, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "02a4cc4a02146fbd98ab868a13be670e", "sha256": "3556238958808bc2bbd6772ae0d24e60e1cc59841ef198cf512ccdc6ecde3c2b" }, "downloads": -1, "filename": "mageia-0.1.0-py3.6.egg", "has_sig": false, "md5_digest": "02a4cc4a02146fbd98ab868a13be670e", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 5406, "upload_time": "2019-10-31T09:30:59", "upload_time_iso_8601": "2019-10-31T09:30:59.187080Z", "url": "https://files.pythonhosted.org/packages/1d/78/0844c402115cd4b63b5602ba2b2064982a1f3e16d3f6ecfb0f48babf133b/mageia-0.1.0-py3.6.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "dc3c22cec379a3750ff573e71ea99f91", "sha256": "566fcc49a0c2873f8c2bc7f83d335dc72e510ab0c805a6f712eac01c4ddb73d3" }, "downloads": -1, "filename": "mageia-0.1.0.tar.gz", "has_sig": false, "md5_digest": "dc3c22cec379a3750ff573e71ea99f91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2443, "upload_time": "2019-10-31T09:31:01", "upload_time_iso_8601": "2019-10-31T09:31:01.649016Z", "url": "https://files.pythonhosted.org/packages/b0/74/f05ee48a5bca0c5b6a7ca438829e6cfcb47c2b5dc0b203bef01878ad3924/mageia-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ff7028193e60d4d23f1751d1d791a39f", "sha256": "1c46c92d8a708521d68fbfa7c534e91983a5a9d993004115cb44685e9ebcb6cc" }, "downloads": -1, "filename": "mageia-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ff7028193e60d4d23f1751d1d791a39f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2304, "upload_time": "2019-10-31T09:55:43", "upload_time_iso_8601": "2019-10-31T09:55:43.765529Z", "url": "https://files.pythonhosted.org/packages/3e/53/8e077bbe722c89f8c9a186a72788dfd7d12d0add80660e645134654331c7/mageia-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "fb89a03cabb0d8b66b379638b863989e", "sha256": "8d98f930a7a0317140e86c24cd8f85d1aab7d5b35648ba11b487ced213c98a64" }, "downloads": -1, "filename": "mageia-0.1.2.tar.gz", "has_sig": false, "md5_digest": "fb89a03cabb0d8b66b379638b863989e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2425, "upload_time": "2019-11-03T07:20:52", "upload_time_iso_8601": "2019-11-03T07:20:52.951054Z", "url": "https://files.pythonhosted.org/packages/e8/02/bdcb238b2dc6d7354356704075713318a05209ff340f6a861eb64d98dbf2/mageia-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "674fa21fdde7b8426106949336be76eb", "sha256": "87dcc3ee40ee45e5e8f43b56da10d35980c226ef36dda6a80b995b116d7117d3" }, "downloads": -1, "filename": "mageia-0.1.3.tar.gz", "has_sig": false, "md5_digest": "674fa21fdde7b8426106949336be76eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3796, "upload_time": "2021-03-30T10:39:22", "upload_time_iso_8601": "2021-03-30T10:39:22.307519Z", "url": "https://files.pythonhosted.org/packages/03/2f/be65fa82e411080c1aa092c19345ba7af6313bc49ebf3d7e0359a49e82f7/mageia-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "8f16c3579f6105b782b437bcf12a6c77", "sha256": "f7c787f422ef60f7777debf70e2727789d279b9ecbb744681adadda49c5b83bb" }, "downloads": -1, "filename": "mageia-0.1.4.tar.gz", "has_sig": false, "md5_digest": "8f16c3579f6105b782b437bcf12a6c77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3842, "upload_time": "2021-04-12T07:13:17", "upload_time_iso_8601": "2021-04-12T07:13:17.003493Z", "url": "https://files.pythonhosted.org/packages/42/f0/57b7ee8fb60cafc29a1f1525e9ad78fcb1d80a39d4e2f46f28d8a30f207d/mageia-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "71048453ce776631971b11084fa6c0d0", "sha256": "e1c9d09b21afa93931cbcee6450274c89e14f0b4cf53fc9e9e133e6ec2357335" }, "downloads": -1, "filename": "mageia-0.1.5-py3.7.egg", "has_sig": false, "md5_digest": "71048453ce776631971b11084fa6c0d0", "packagetype": "bdist_egg", "python_version": "0.1.5", "requires_python": null, "size": 15830, "upload_time": "2021-06-17T03:40:33", "upload_time_iso_8601": "2021-06-17T03:40:33.036964Z", "url": "https://files.pythonhosted.org/packages/ff/d6/0ee265fdf47ff34404cb458e740715edbee5333a5953872c117be8a90760/mageia-0.1.5-py3.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "709906b96b62012b1f077261d32eb092", "sha256": "c8e6bdfded63cc569d3fc364a066d02b729ad345c04c8ca7d72f3be8aada0334" }, "downloads": -1, "filename": "mageia-0.1.5.tar.gz", "has_sig": false, "md5_digest": "709906b96b62012b1f077261d32eb092", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3825, "upload_time": "2021-04-12T09:42:28", "upload_time_iso_8601": "2021-04-12T09:42:28.413084Z", "url": "https://files.pythonhosted.org/packages/75/37/2322842ed7a45980541e59362680776d381c18873573001b7afc1871821b/mageia-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "383a0a2e535b46d7bce5ccc45462040b", "sha256": "8795eead2e75d56b395edd3efc8f6de22c6e126c27c2fad94a5d3485f5102a26" }, "downloads": -1, "filename": "mageia-0.2.1.tar.gz", "has_sig": false, "md5_digest": "383a0a2e535b46d7bce5ccc45462040b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6106, "upload_time": "2021-06-17T07:08:22", "upload_time_iso_8601": "2021-06-17T07:08:22.443098Z", "url": "https://files.pythonhosted.org/packages/ac/80/10b50b989fbf110aa88ec916555e7d7577af294d8bc90d52b9ab01cd4640/mageia-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "a13f4dcac435fe355075ef48710f5456", "sha256": "ce15ebb1a976700cb39101b2b32246cfbffe0079f7856d51d8955fa0f5aee25d" }, "downloads": -1, "filename": "mageia-0.2.2.tar.gz", "has_sig": false, "md5_digest": "a13f4dcac435fe355075ef48710f5456", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6102, "upload_time": "2021-08-07T12:28:54", "upload_time_iso_8601": "2021-08-07T12:28:54.474836Z", "url": "https://files.pythonhosted.org/packages/51/b6/b60c46e12fbec38593b480f510bec9a06662d90c827451d787e4f73bf34c/mageia-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a13f4dcac435fe355075ef48710f5456", "sha256": "ce15ebb1a976700cb39101b2b32246cfbffe0079f7856d51d8955fa0f5aee25d" }, "downloads": -1, "filename": "mageia-0.2.2.tar.gz", "has_sig": false, "md5_digest": "a13f4dcac435fe355075ef48710f5456", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6102, "upload_time": "2021-08-07T12:28:54", "upload_time_iso_8601": "2021-08-07T12:28:54.474836Z", "url": "https://files.pythonhosted.org/packages/51/b6/b60c46e12fbec38593b480f510bec9a06662d90c827451d787e4f73bf34c/mageia-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }