{ "info": { "author": "tao.py", "author_email": "taojy123@163.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation", "Topic :: Software Development :: Libraries" ], "description": "# sqlx\n\nSQL Extension\n\n\u4e00\u79cd\u6269\u5c55 sql \u7684\u8bed\u8a00\uff0c\u76ee\u6807\u662f\u6253\u9020 \"\u6613\u8bfb\u6613\u5199 \u65b9\u4fbf\u7ef4\u62a4\" \u7684 sql \u811a\u672c\n\n\n## \u8bed\u6cd5\u7b80\u4ecb\n\n### 1. \u901a\u8fc7 `define` \u5b9a\u4e49\u53d8\u91cf\uff0c\u53ef\u5728\u811a\u672c\u4e2d\u53cd\u590d\u5f15\u7528\n\n\u793a\u4f8b:\n```sql\ndefine field_name age\n\nSELECT {field_name} from students WHERE {field_name} > 10;\nSELECT {field_name} from teachers WHERE {field_name} > 10;\n```\n\n\u7f16\u8bd1\u751f\u6210 sql \u4e3a:\n```sql\nSELECT age from students WHERE age > 10;\nSELECT age from teachers WHERE age > 10;\n```\n\n\n### 2. \u901a\u8fc7 `block` \u5b9a\u4e49\u811a\u672c\u7247\u6bb5\uff0c\u5e76\u53cd\u590d\u5f15\u7528\n\n\u793a\u4f8b:\n```sql\n-- ! \u5b9a\u4e49\u7247\u6bb5\nblock good_students(score)\n (\n SELECT\n *\n FROM\n students\n WHERE\n score > {score}\n ) AS good_students\nendblock\n\nSELECT name FROM {good_students(80)};\nSELECT count(*) FROM {good_students(80)};\n```\n\n\u7f16\u8bd1\u751f\u6210 sql \u4e3a:\n```sql\nSELECT name FROM \n (\n SELECT\n *\n FROM\n students\n WHERE\n score > 80\n ) AS good_students\n;\nSELECT count(*) FROM \n (\n SELECT\n *\n FROM\n students\n WHERE\n score > 80\n ) AS good_students\n;\n```\n\n\n### 3. \u5faa\u73af\n\u901a\u8fc7 `for` \u6279\u91cf\u5faa\u73af\u751f\u6210\u811a\u672c\uff08\u6682\u4e0d\u652f\u6301\u5faa\u73af\u5d4c\u5957\uff09\n\n\n\n\u793a\u4f8b1:\n```sql\n{% for n in table1,table2,table3 %}\n SELECT * FROM {n};\n{% endfor %}\n```\n\n\u7f16\u8bd1\u751f\u6210 sql \u4e3a:\n```sql\nSELECT * FROM table1;\nSELECT * FROM table2;\nSELECT * FROM table3;\n```\n\n\n\u793a\u4f8b2:\n```sql\n{% for n|m in table1|id,table2|name,table3|age %}\n SELECT {m} FROM {n};\n{% endfor %}\n```\n\n\u7f16\u8bd1\u751f\u6210 sql \u4e3a:\n```sql\nSELECT id FROM table1;\nSELECT name FROM table2;\nSELECT age FROM table3;\n```\n\n\n### 4. \u5224\u65ad\n\u901a\u8fc7 `if` \u751f\u6210\u903b\u8f91\u5206\u652f\u811a\u672c\uff08\u6682\u4e0d\u652f\u6301 if \u5d4c\u5957\uff09\n\n\n\u793a\u4f8b1:\n```sql\ndefine a 8\n\n{% if $a > 4 %}\n SELECT * FROM table1;\n{% endif %}\n```\n\n\u7f16\u8bd1\u751f\u6210 sql \u4e3a:\n```sql\nSELECT * FROM table1;\n```\n\n\u793a\u4f8b2:\n```sql\n{% for n in table1,table2,table3 %}\n {% if $n == table1 %}\n SELECT id, name FROM {n};\n {% else%}\n SELECT * FROM {n};\n {% endif %}\n{% endfor %}\n```\n\n\u7f16\u8bd1\u751f\u6210 sql \u4e3a:\n```sql\nSELECT id, name FROM table1;\nSELECT * FROM table2;\nSELECT * FROM table3;\n```\n\n\n\u66f4\u591a\u793a\u4f8b\u53ef\u53c2\u8003 [demo.sqlx](https://github.com/taojy123/sqlx/blob/master/demo.sqlx)\n\n\n### 5. \u751f\u6210 `{` `}` \u5b57\u7b26\n\u5982\u679c\u4f60\u9700\u8981\u5728\u751f\u6210\u7684 sql \u5185\u5bb9\u4e2d\u5305\u542b `{` `}` \u8fd9\u6837\u7684\u5b57\u7b26\uff0c\u4e0d\u80fd\u76f4\u63a5\u5728 sqlx \u4e2d\u5199 `{` \u6216 `}`\uff0c\u56e0\u4e3a\u8fd9\u6837\u4f1a\u88ab\u8ba4\u4e3a\u662f\u53d8\u91cf\u7684\u5f15\u7528\u6807\u8bb0\n\n\u4f60\u9700\u8981\u5728\u8fd9\u4e9b\u5b57\u7b26\u524d\u52a0\u4e0a\u4e00\u4e2a\u8f6c\u4e49\u7b26\uff08\u9ed8\u8ba4\u662f`\\`\uff09\uff0c\u5982 `\\{` `\\}` \u8fd9\u6837\u5373\u53ef\n\n\u793a\u4f8b:\n```sql\ndefine cc dd\nSELECT * FROM table1 WHERE name = 'aa\\{bb\\}{cc}'\n```\n\n\u7f16\u8bd1\u751f\u6210 sql \u4e3a:\n```sql\nSELECT * FROM table1 WHERE name = 'aa{bb}dd'\n```\n\n\n### 6. \u4f7f\u7528 `import` \u5bfc\u5165\u6a21\u5757\n\n\u901a\u8fc7 import \u53ef\u4ee5\u5f15\u5165\u73b0\u6709\u7684 sqlx \u811a\u672c\u6587\u4ef6\u4f5c\uff0c\u4f46\u53ea\u80fd\u5bfc\u5165\u5176\u4e2d\u7684 define \u548c block\n\n\u5982\u679c\u5728\u5f53\u524d\u811a\u672c\u6709\u91cd\u590d\u540c\u540d\u53d8\u91cf\u6216 block\uff0c\u4f1a\u88ab\u8986\u76d6\u4ee5\u5f53\u524d\u811a\u672c\u4e3a\u51c6\n\n\u793a\u4f8b:\n```sql\n-- mod.sqlx\ndefine colume name\ndefine colume2 score\n\nblock good_students(score)\n (\n SELECT\n *\n FROM\n students\n WHERE\n score > {score}\n ) AS good_students\nendblock\n```\n\n```sql\nimport mod\ndefine colume2 age\nSELECT {colume} from teachers WHERE {colume2} > 10;\nSELECT name FROM {good_students(60)};\nSELECT count(*) FROM {good_students(80)};\n```\n\n\u7f16\u8bd1\u751f\u6210 sql \u4e3a:\n```sql\nSELECT name from teachers WHERE age > 10;\nSELECT name FROM \n (\n SELECT\n *\n FROM\n students\n WHERE\n score > 60\n ) AS good_students\n;\nSELECT count(*) FROM \n (\n SELECT\n *\n FROM\n students\n WHERE\n score > 80\n ) AS good_students\n;\n```\n\n\n-------\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n`Windows 64\u4f4d\u7cfb\u7edf`\uff0c\u76f4\u63a5\u4e0b\u8f7d [sqlx.exe](https://github.com/taojy123/sqlx/releases) \u653e\u7f6e\u4e8e `.sqlx \u811a\u672c\u6587\u4ef6` \u540c\u76ee\u5f55\u4e0b\n\n\u53cc\u51fb `sqlx.exe` \u5373\u53ef\u5728 `dist` \u76ee\u5f55\u4e2d\u751f\u6210\u5bf9\u5e94 `sql` \u6587\u4ef6\n\n\n-------\n\n\n## \u5176\u4ed6\u7cfb\u7edf\u5e73\u53f0\uff0c\u901a\u8fc7 Python3 \u5b89\u88c5\u4f7f\u7528\n\n\u5982\u679c\u4f60\u7684\u7cfb\u7edf\u65e0\u6cd5\u8fd0\u884c `sqlx.exe`\uff0c\u53ef\u4ee5\u5148\u5b89\u88c5 [Python3](https://www.python.org/downloads/)\uff0c\u7136\u540e\u4f7f\u7528 `pip` \u547d\u4ee4\u4e00\u952e\u5b89\u88c5\n\n```\npip install sqlx\n```\n\n\n### \u4f7f\u7528 `sqlx` \u547d\u4ee4\u884c\u5de5\u5177\n\n1. \u5b89\u88c5\u540e\u76f4\u63a5\u6267\u884c `sqlx` \u547d\u4ee4\uff0c\u53ef\u4e00\u952e\u7f16\u8bd1\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6240\u6709 `.sqlx \u811a\u672c\u6587\u4ef6`\n```\n$ ls\ntest1.sqlx test2.sqlx\n\n$ sqlx\ndist/test1.sql built\ndist/test2.sql built\nFinish!\n\n$ ls dist\ntest1.sql test2.sql\n```\n\n\n2. `sqlx` \u547d\u4ee4\u540e\u8ddf\u968f\u76ee\u5f55\u8def\u5f84\u53c2\u6570\uff0c\u53ef\u7f16\u8bd1\u6307\u5b9a\u8def\u5f84\u4e0b\u7684\u6240\u6709\u811a\u672c\n```\n$ ls test\ntest3.sqlx test4.sqlx\n\n$ sqlx ./test/\ntest/dist/test3.sql built\ntest/dist/test4.sql built\nFinish!\n\n$ ls test/dist\ntest3.sql test4.sql\n```\n\n\n3. `sqlx` \u547d\u4ee4\u540e\u8ddf\u968f\u6587\u4ef6\u8def\u5f84\u53c2\u6570\uff0c\u53ef\u7f16\u8bd1\u6307\u5b9a\u7684\u5355\u4e2a\u811a\u672c\n```\n$ sqlx ./test/test3.sqlx\ntest/dist/test3.sql built\nFinish!\n\n$ ls test/dist\ntest3.sql\n```\n\n\n### \u5728 Python3 \u7a0b\u5e8f\u4e2d\u4f7f\u7528 `sqlx.build` \u65b9\u6cd5\n```python\nimport sqlx\n\nmy_script = \"\"\"\n{% for n in table1,table2,table3 %}\n {% if $n == table1 %}\n SELECT id, name FROM {n};\n {% else %}\n SELECT * FROM {n};\n {% endif %}\n{% endfor %}\n\"\"\"\n\nsql = sqlx.build(my_script, pretty=True)\nprint(sql)\n```\n\n\n\n\n\n\n## \u7248\u672c\u66f4\u65b0\u8bf4\u660e \n\n\n### v0.1.1\n\n\u7b2c\u4e00\u4e2a\u53ef\u7528\u7248\u672c\u53d1\u5e03\n\n- \u652f\u6301 `escape` \uff08\u9ed8\u8ba4`\\`\uff09\n- \u81ea\u52a8\u590d\u5236\u7f16\u8bd1\u7684 `sql` \u8fdb\u526a\u5207\u677f\n- import sqlx \u811a\u672c\u529f\u80fd\n\n\n### v0.1.0\n\n\u7b2c\u4e00\u4e2a\u53ef\u7528\u7248\u672c\u53d1\u5e03\n\n- \u652f\u6301 `define` \u8bed\u6cd5\n- \u652f\u6301 `block` \u8bed\u6cd5\n- \u652f\u6301 `for` \u8bed\u6cd5\n- \u652f\u6301 `if` \u8bed\u6cd5", "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/taojy123/sqlx", "keywords": "", "license": "MIT License", "maintainer": "tao.py", "maintainer_email": "taojy123@163.com", "name": "sqlx", "package_url": "https://pypi.org/project/sqlx/", "platform": "all", "project_url": "https://pypi.org/project/sqlx/", "project_urls": { "Homepage": "https://github.com/taojy123/sqlx" }, "release_url": "https://pypi.org/project/sqlx/0.1.1/", "requires_dist": null, "requires_python": "", "summary": "SQL Extension | SQL \u8bed\u6cd5\u62d3\u5c55\uff0c\u76ee\u6807\u662f\u6253\u9020 \"\u6613\u8bfb\u6613\u5199 \u65b9\u4fbf\u7ef4\u62a4\" \u7684 sql \u811a\u672c", "version": "0.1.1", "yanked": false, "yanked_reason": null }, "last_serial": 6061939, "releases": { "0.0.6": [ { "comment_text": "", "digests": { "md5": "876750afb075b0799f04629deea6501b", "sha256": "427c36a21876fef1644b90fadf43deea5db445beae62a2b49dc8bd3f6ff65fbd" }, "downloads": -1, "filename": "sqlx-0.0.6.tar.gz", "has_sig": false, "md5_digest": "876750afb075b0799f04629deea6501b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30585, "upload_time": "2019-10-29T05:17:53", "upload_time_iso_8601": "2019-10-29T05:17:53.120177Z", "url": "https://files.pythonhosted.org/packages/e4/f5/9194ecb9329482898b6a5a932fb7d4f376c476b82349ec78bf569905ed57/sqlx-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "e754e0a1a601480c454b0981200228c2", "sha256": "191705bdad7d14ece1903604b05bab3ab195b1f17af289e6c3fe37dcecb8f5c1" }, "downloads": -1, "filename": "sqlx-0.0.7.tar.gz", "has_sig": false, "md5_digest": "e754e0a1a601480c454b0981200228c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32245, "upload_time": "2019-10-29T05:30:21", "upload_time_iso_8601": "2019-10-29T05:30:21.224238Z", "url": "https://files.pythonhosted.org/packages/a3/3a/245a75570c62d794e70e508e1d04f39e1075fc20e043058949eee7c8e600/sqlx-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "2282f5bc422d3bd58f96519118f1e6e5", "sha256": "7b5979719a5d39896246a919d79709bb2276edc9b5180ae03fddc812c8f375d4" }, "downloads": -1, "filename": "sqlx-0.1.0.tar.gz", "has_sig": false, "md5_digest": "2282f5bc422d3bd58f96519118f1e6e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32330, "upload_time": "2019-10-29T06:31:05", "upload_time_iso_8601": "2019-10-29T06:31:05.799607Z", "url": "https://files.pythonhosted.org/packages/2d/c9/620757b9335f5c436c65cbceb61fd3812b6442f299b5e705f60defc445d7/sqlx-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7c2f07cc20339fe46ee8b4640478dd8c", "sha256": "dc2df817f54faaecaa209e830d51ffe2cfc81bb354ccbd2bfeefede060ea72c9" }, "downloads": -1, "filename": "sqlx-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7c2f07cc20339fe46ee8b4640478dd8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34339, "upload_time": "2019-11-01T05:47:58", "upload_time_iso_8601": "2019-11-01T05:47:58.541947Z", "url": "https://files.pythonhosted.org/packages/da/2c/b4d66cf697a22fe90b0e2848fa1bdafe5c94b6fada0c63c85b70f9aa033a/sqlx-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7c2f07cc20339fe46ee8b4640478dd8c", "sha256": "dc2df817f54faaecaa209e830d51ffe2cfc81bb354ccbd2bfeefede060ea72c9" }, "downloads": -1, "filename": "sqlx-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7c2f07cc20339fe46ee8b4640478dd8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34339, "upload_time": "2019-11-01T05:47:58", "upload_time_iso_8601": "2019-11-01T05:47:58.541947Z", "url": "https://files.pythonhosted.org/packages/da/2c/b4d66cf697a22fe90b0e2848fa1bdafe5c94b6fada0c63c85b70f9aa033a/sqlx-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }