{"id":556,"date":"2024-04-28T18:37:26","date_gmt":"2024-04-28T09:37:26","guid":{"rendered":"https:\/\/chocottopro.com\/?p=556"},"modified":"2024-04-28T18:37:26","modified_gmt":"2024-04-28T09:37:26","slug":"%e3%80%90python%e3%80%91%e3%81%9f%e3%81%a3%e3%81%9f15%e5%88%86%e3%81%a7%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%e3%81%a7%e3%81%8d%e3%82%8b%ef%bc%81peewee%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%82%b7","status":"publish","type":"post","link":"https:\/\/chocottopro.com\/?p=556","title":{"rendered":"\u3010Python\u3011\u305f\u3063\u305f15\u5206\u3067\u30de\u30b9\u30bf\u30fc\u3067\u304d\u308b\uff01Peewee\u3092\u4f7f\u3063\u305f\u30b7\u30f3\u30d7\u30eb\u306aORM\u5165\u9580"},"content":{"rendered":"\n<p>Python\u3067Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u306a\u3089\u3001ORM\u306e\u4f7f\u3044\u65b9\u3092\u899a\u3048\u3066\u304a\u304f\u3068\u52b9\u7387\u7684\u306b\u958b\u767a\u3092\u9032\u3081\u3089\u308c\u307e\u3059\u3002<br>\u4e2d\u3067\u3082Peewee\u306f\u3001\u8efd\u91cf\u3067\u30b7\u30f3\u30d7\u30eb\u306a\u8a2d\u8a08\u304c\u7279\u5fb4\u306e\u4eba\u6c17ORM\u3067\u3001Flask\u306a\u3069\u306e\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u76f8\u6027\u629c\u7fa4\u3067\u3059\u3002<br>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001Peewee\u306e\u57fa\u790e\u304b\u3089Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u5b9f\u8df5\u7684\u306aTips\u307e\u3067\u3092\u3001\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u4ed8\u304d\u3067\u308f\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<br>\u77ed\u6642\u9593\u3067Peewee\u3092\u30de\u30b9\u30bf\u30fc\u3057\u3066\u3001\u751f\u7523\u6027\u306e\u9ad8\u3044Python\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u76ee\u6307\u3057\u307e\u3057\u3087\u3046\uff01<\/p>\n\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u3053\u306e\u8a18\u4e8b\u3092\u8aad\u3093\u3060\u3089\u308f\u304b\u308b\u3053\u3068<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\">\n<li>ORM\u306e\u6982\u8981\u3068\u30e1\u30ea\u30c3\u30c8 <\/li>\n\n\n\n<li>Peewee\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9 <\/li>\n\n\n\n<li>\u30e2\u30c7\u30eb\u5b9a\u7fa9\u3068\u30af\u30a8\u30ea\u306e\u66f8\u304d\u65b9 <\/li>\n\n\n\n<li>\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9a\u7fa9\u3068CRUD\u64cd\u4f5c <\/li>\n\n\n\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5236\u5fa1\u3068\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3 <\/li>\n\n\n\n<li>Flask\u306a\u3069\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306eWeb\u30a2\u30d7\u30ea\u958b\u767a <\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u610f\u8b58\u3057\u305fTips <\/li>\n\n\n\n<li>Peewee\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/c7479301\/public_html\/chocottopro.com\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/c7479301\/public_html\/chocottopro.com\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/c7479301\/public_html\/chocottopro.com\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"Table of Contents\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Peewee\u3068\u306f\u4f55\u304b\uff1fORM\u5165\u9580<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">ORM\u306e\u6982\u8981\u3068\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-2\">Peewee\u3068\u3044\u3046Python\u306eORM<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u4ed6\u306eORM\u3068\u306e\u6bd4\u8f03<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">Peewee\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u30e2\u30c7\u30eb\u306e\u5b9a\u7fa9\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-7\">\u30af\u30a8\u30ea\u306e\u66f8\u304d\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-8\">CRUD\u306e\u64cd\u4f5c\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-9\">Peewee\u306e\u5fdc\u7528\u7684\u306a\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9a\u7fa9\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-11\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u51e6\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u7ba1\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-13\">Peewee\u3092\u4f7f\u3063\u305fWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">Flask\u7b49\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u9023\u643a<\/a>      <\/li>      <li>        <a href=\"#i-15\">\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3068\u306e\u76f8\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-17\">Peewee\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">\u30b3\u30fc\u30c9\u4f8b\u3067\u5b66\u3076\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9<\/a>      <\/li>      <li>        <a href=\"#i-19\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u610f\u8b58\u3057\u305f\u30af\u30a8\u30ea\u306e\u66f8\u304d\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306b\u914d\u616e\u3057\u305f\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-21\">\u307e\u3068\u3081\uff1aPeewee\u3092\u4f7f\u3044\u3053\u306a\u305d\u3046\uff01<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-22\">Peewee\u306e\u30e1\u30ea\u30c3\u30c8\u3068\u5411\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\">\u3055\u3089\u306b\u5b66\u7fd2\u3092\u9032\u3081\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      \n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Peewee\u3068\u306f\u4f55\u304b\uff1fORM\u5165\u9580<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">ORM\u306e\u6982\u8981\u3068\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<p>ORM\u3068\u306fObject-Relational Mapping\u306e\u7565\u3067\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3068\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u9593\u3092\u4ef2\u4ecb\u3059\u308b\u6280\u8853\u306e\u3053\u3068\u3067\u3059\u3002ORM\u3092\u4f7f\u3048\u3070\u3001SQL\u3092\u76f4\u63a5\u66f8\u304b\u306a\u304f\u3066\u3082\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u64cd\u4f5c\u611f\u899a\u3067DB\u3092\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>ORM\u3092\u5c0e\u5165\u3059\u308b\u30e1\u30ea\u30c3\u30c8\u3068\u3057\u3066\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u304c\u5411\u4e0a\u3057\u3001\u958b\u767a\u52b9\u7387\u304c\u4e0a\u304c\u308b<\/li>\n\n\n\n<li>DB\u306e\u7a2e\u985e\u306b\u4f9d\u5b58\u3057\u306a\u3044\u305f\u3081\u3001\u79fb\u884c\u304c\u5bb9\u6613\u306b\u306a\u308b<\/li>\n\n\n\n<li>SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u653b\u6483\u306e\u30ea\u30b9\u30af\u3092\u6e1b\u3089\u305b\u308b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">Peewee\u3068\u3044\u3046Python\u306eORM<\/h3>\n\n\n\n<p>Peewee\u306fPython\u3067\u66f8\u304b\u308c\u305f\u8efd\u91cf\u3067\u30b7\u30f3\u30d7\u30eb\u306aORM\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002Django ORM\u306e\u3088\u3046\u306b\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u306aWeb\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u306a\u304f\u3001\u5358\u72ec\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u3057\u3066\u4f7f\u7528\u3067\u304d\u308b\u305f\u3081\u3001\u8efd\u91cf\u306a\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306eFlask\u306a\u3069\u3068\u7d44\u307f\u5408\u308f\u305b\u3084\u3059\u3044\u306e\u304c\u7279\u5fb4\u3067\u3059\u3002<\/p>\n\n\n\n<p>Peewee\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u4e3b\u8981\u306aRDB\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SQLite<\/li>\n\n\n\n<li>MySQL<\/li>\n\n\n\n<li>PostgreSQL<\/li>\n<\/ul>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u306f\u3001\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u3092\u5b9a\u7fa9\u3057\u3066\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u6307\u5b9a\u3057\u3001\u305d\u306e\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u306b\u5bfe\u3057\u3066\u5404\u7a2e\u64cd\u4f5c\u3092\u884c\u3046\u3068\u3044\u3046\u6d41\u308c\u306b\u306a\u308a\u307e\u3059\u3002\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from peewee import *\n\n# \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u63a5\u7d9a\ndb = SqliteDatabase('people.db')\n\n# \u30e2\u30c7\u30eb\u306e\u5b9a\u7fa9\nclass Person(Model):\n    name = CharField()\n    birthday = DateField()\n    is_relative = BooleanField()\n\n    class Meta:\n        database = db # \u4f7f\u7528\u3059\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6307\u5b9a\n\n# \u30c6\u30fc\u30d6\u30eb\u4f5c\u6210\ndb.create_tables([Person])\n\n# \u30ec\u30b3\u30fc\u30c9\u8ffd\u52a0\nuncle_bob = Person(name='Bob', birthday=date(1960, 1, 15), is_relative=True) \nuncle_bob.save()\n\n# \u30af\u30a8\u30ea\nfor person in Person.select().where(Person.is_relative == True):\n    print(person.name, person.birthday)<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u30e2\u30c7\u30eb\u3092\u5b9a\u7fa9\u3057\u3066\u304b\u3089\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u901a\u3058\u3066CRUD\u3092\u884c\u3048\u308b\u306e\u304cPeewee\u306e\u57fa\u672c\u30b9\u30bf\u30a4\u30eb\u3067\u3059\u3002\u30af\u30a8\u30ea\u3082Python\u306e\u30b3\u30fc\u30c9\u3068\u3057\u3066\u8868\u73fe\u3067\u304d\u308b\u305f\u3081\u3001SQL\u3092\u77e5\u3089\u306a\u304f\u3066\u3082\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u64cd\u4f5c\u3067\u304d\u308b\u306e\u304c\u5b09\u3057\u3044\u30dd\u30a4\u30f3\u30c8\u3067\u3059\u306d\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u4ed6\u306eORM\u3068\u306e\u6bd4\u8f03<\/h3>\n\n\n\n<p>Peewee\u3068\u4ed6\u306e\u4ee3\u8868\u7684\u306aPython ORM\u3092\u6bd4\u3079\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>Django ORM\u306fDjango\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u5b8c\u5168\u7d71\u5408\u3055\u308c\u305f\u5f62\u3067\u63d0\u4f9b\u3055\u308c\u3066\u304a\u308a\u3001Peewee\u3088\u308a\u3082\u62bd\u8c61\u5ea6\u304c\u9ad8\u3044\u5206\u3001Django\u306e\u601d\u60f3\u306b\u6cbf\u3063\u305f\u4f7f\u3044\u65b9\u304c\u6c42\u3081\u3089\u308c\u307e\u3059\u3002\u4e00\u65b9\u306eSQLAlchemy\u306f\u3001Peewee\u306b\u6bd4\u3079\u3066\u8868\u73fe\u529b\u304c\u9ad8\u304f\u67d4\u8edf\u3067\u3059\u304c\u3001\u305d\u306e\u5206\u5b66\u7fd2\u30b3\u30b9\u30c8\u3082\u9ad8\u304f\u306a\u308b\u50be\u5411\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>PonyORM\u306fPeewee\u3068\u540c\u3058\u304f\u30b7\u30f3\u30d7\u30eb\u3055\u3092\u58f2\u308a\u306b\u3057\u3066\u3044\u307e\u3059\u304c\u3001Peewee\u306fFlask\u306a\u3069\u306e\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u89aa\u548c\u6027\u304c\u9ad8\u3044\u306e\u304c\u7279\u5fb4\u3067\u3059\u3002<\/p>\n\n\n\n<p>ORM\u306b\u306f\u305d\u308c\u305e\u308c\u306b\u8a2d\u8a08\u601d\u60f3\u306e\u9055\u3044\u304c\u3042\u308b\u306e\u3067\u3001\u7528\u9014\u3084\u30c1\u30fc\u30e0\u306e\u7fd2\u719f\u5ea6\u306b\u5408\u308f\u305b\u3066\u9069\u5207\u306b\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u5927\u5207\u3067\u3059\u304c\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u30b7\u30f3\u30d7\u30eb\u3055\u3068\u8efd\u91cf\u3055\u3092\u91cd\u8996\u3059\u308b\u306a\u3089\u3001Peewee\u306f\u975e\u5e38\u306b\u6709\u529b\u306a\u9078\u629e\u80a2\u3060\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">Peewee\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h3>\n\n\n\n<p>Peewee\u306fpip\u30b3\u30de\u30f3\u30c9\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install peewee<\/pre>\n\n\n\n<p>Peewee\u5358\u4f53\u3067\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u63a5\u7d9a\u3067\u304d\u306a\u3044\u305f\u3081\u3001\u4f7f\u7528\u3059\u308bDB\u306b\u5fdc\u3058\u305fPython\u30c9\u30e9\u30a4\u30d0\u3082\u5225\u9014\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br>\u4f8b\u3048\u3070MySQL\u3092\u4f7f\u3046\u5834\u5408\u306f\u3001PyMySQL\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install PyMySQL<\/pre>\n\n\n\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001Peewee\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u63a5\u7d9a\u3057\u307e\u3059\u3002Database\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3059\u308b\u969b\u306b\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d\u3001\u30e6\u30fc\u30b6\u30fc\u540d\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3001\u30db\u30b9\u30c8\u540d\u306a\u3069\u306e\u63a5\u7d9a\u60c5\u5831\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from peewee import *\n\ndb = MySQLDatabase('my_database', user='user', password='password', host='hostname')<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30e2\u30c7\u30eb\u306e\u5b9a\u7fa9\u65b9\u6cd5<\/h3>\n\n\n\n<p>Peewee\u3067\u306fModel\u30af\u30e9\u30b9\u3092\u7d99\u627f\u3057\u3066\u30e2\u30c7\u30eb\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002User\u30e2\u30c7\u30eb\u3092\u4f8b\u306b\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from peewee import *\n\nclass User(Model):\n    username = CharField(unique=True)\n    email = CharField(unique=True)\n    age = IntegerField()\n\n    class Meta:\n        database = db\n        table_name = 'users'<\/pre>\n\n\n\n<p>\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u3001CharField\u3084IntegerField\u306a\u3069\u306e\u578b\u3054\u3068\u306b\u7528\u610f\u3055\u308c\u3066\u3044\u308bField\u30af\u30e9\u30b9\u3092\u4f7f\u3063\u3066\u5b9a\u7fa9\u3057\u307e\u3059\u3002\u305d\u306e\u969b\u3001\u30e6\u30cb\u30fc\u30af\u5236\u7d04\u3084\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306a\u3069\u3082\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001Meta\u30af\u30e9\u30b9\u5185\u3067\u4f7f\u7528\u3059\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3084\u30c6\u30fc\u30d6\u30eb\u540d\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c6\u30fc\u30d6\u30eb\u540d\u3092\u7701\u7565\u3057\u305f\u5834\u5408\u306f\u3001\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u540d\u306e\u5c0f\u6587\u5b57\u304c\u30c6\u30fc\u30d6\u30eb\u540d\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30af\u30a8\u30ea\u306e\u66f8\u304d\u65b9<\/h3>\n\n\n\n<p>Peewee\u3067\u306f\u3001select\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u3067SELECT\u30af\u30a8\u30ea\u3092\u767a\u884c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">query = User.select()\nfor user in query:\n    print(user.username, user.email)<\/pre>\n\n\n\n<p>where\u30e1\u30bd\u30c3\u30c9\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u6761\u4ef6\u3092\u3001order_by\u30e1\u30bd\u30c3\u30c9\u3067\u306f\u30bd\u30fc\u30c8\u6761\u4ef6\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306f\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u3067\u3064\u306a\u3052\u3066\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">query = User.select().where(User.age &gt; 20).order_by(User.username)<\/pre>\n\n\n\n<p>count, avg, sum\u306a\u3069\u306e\u96c6\u8a08\u95a2\u6570\u3082\u4f7f\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">count = User.select().count()\nprint(count)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">CRUD\u306e\u64cd\u4f5c\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30ec\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306fcreate\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">user = User.create(username='john', email='john@example.com', age=30)<\/pre>\n\n\n\n<p>\u30ec\u30b3\u30fc\u30c9\u3092\u66f4\u65b0\u3059\u308b\u306b\u306f\u3001\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5c5e\u6027\u3092\u5909\u66f4\u3057\u3066save\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">user.age = 31\nuser.save()<\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<p>\u30ec\u30b3\u30fc\u30c9\u3092\u524a\u9664\u3059\u308b\u306b\u306fdelete_instance\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n<\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">user.delete_instance()<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306bPeewee\u3067\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u306a\u30af\u30e9\u30b9\u3068\u30e1\u30bd\u30c3\u30c9\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u304c\u884c\u3048\u307e\u3059\u3002<br>\u6b21\u306f\u3001\u3082\u3046\u5c11\u3057\u5fdc\u7528\u7684\u306a\u4f7f\u3044\u65b9\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">Peewee\u306e\u5fdc\u7528\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9a\u7fa9\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u7279\u5fb4\u306f\u3001\u30c6\u30fc\u30d6\u30eb\u540c\u58eb\u3092\u95a2\u9023\u4ed8\u3051\u3089\u308c\u308b\u3053\u3068\u3002Peewee\u3067\u306f\u3001ForeignKeyField\u3084ManyToManyField\u3092\u4f7f\u3063\u3066\u30e2\u30c7\u30eb\u9593\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4f8b\u3048\u3070\u3001\u30e6\u30fc\u30b6\u30fc\u3068\u30c4\u30a4\u30fc\u30c8\u306e1\u5bfe\u591a\u306e\u95a2\u4fc2\u306f\u6b21\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class User(Model):\n    username = CharField()\n\nclass Tweet(Model):\n    user = ForeignKeyField(User, backref='tweets')\n    message = TextField()\n\n# \u30e6\u30fc\u30b6\u30fc\u306e\u66f8\u3044\u305f\u30c4\u30a4\u30fc\u30c8\u3092\u53d6\u5f97\nuser = User.get(User.username == 'john')\ntweets = user.tweets\n\n# \u30c4\u30a4\u30fc\u30c8\u3092\u66f8\u3044\u305f\u30e6\u30fc\u30b6\u30fc\u3092\u53d6\u5f97\ntweet = Tweet.get()\nuser = tweet.user<\/pre>\n\n\n\n<p>ForeignKeyField\u306b\u306f\u3001\u95a2\u9023\u4ed8\u3051\u308b\u5bfe\u8c61\u306e\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u3068\u3001backref\u30ad\u30fc\u30ef\u30fc\u30c9\u5f15\u6570\u3067\u30e6\u30fc\u30b6\u30fc\u5074\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u5c5e\u6027\u540d\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u591a\u5bfe\u591a\u306e\u95a2\u4fc2\u306b\u306f\u3001ManyToManyField\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u304c\u30c4\u30a4\u30fc\u30c8\u3092\u304a\u6c17\u306b\u5165\u308a\u306b\u767b\u9332\u3059\u308b\u5834\u5408\u3092\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class User(Model):\n    username = CharField()\n\nclass Tweet(Model):\n    message = TextField()  \n\nclass Favorite(Model):\n    user = ForeignKeyField(User)\n    tweet = ForeignKeyField(Tweet)\n\n# \u30e6\u30fc\u30b6\u30fc\u306e\u304a\u6c17\u306b\u5165\u308a\u30c4\u30a4\u30fc\u30c8\u3092\u53d6\u5f97\nuser = User.get(User.username == 'john')\nfavorites = Favorite.select().where(Favorite.user == user)\ntweets = [fav.tweet for fav in favorites]\n\n# \u30c4\u30a4\u30fc\u30c8\u3092\u304a\u6c17\u306b\u5165\u308a\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u3092\u53d6\u5f97  \ntweet = Tweet.get()\nfavorites = Favorite.select().where(Favorite.tweet == tweet)\nusers = [fav.user for fav in favorites]  <\/pre>\n\n\n\n<p>\u4e2d\u9593\u30e2\u30c7\u30eb\u306eFavorite\u3092\u5b9a\u7fa9\u3057\u3001\u305d\u308c\u305e\u308c\u306eForeignKeyField\u3067User\u3068Tweet\u306b\u95a2\u9023\u4ed8\u3051\u308b\u3053\u3068\u3067\u591a\u5bfe\u591a\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u8868\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Peewee\u3067\u306f\u30b7\u30f3\u30d7\u30eb\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\u5b9a\u7fa9\u3067\u30e2\u30c7\u30eb\u9593\u306e\u95a2\u4fc2\u6027\u3092\u8868\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u901a\u5e38\u306eSQL\u3067\u306f\u8907\u96d1\u306aJOIN\u30af\u30a8\u30ea\u3092\u66f8\u304b\u306a\u3051\u308c\u3070\u3044\u3051\u307e\u305b\u3093\u304c\u3001Peewee\u3067\u306f\u95a2\u9023\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8fbf\u308b\u3060\u3051\u3067\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3067\u304d\u308b\u306e\u304c\u30dd\u30a4\u30f3\u30c8\u3067\u3059\u306d\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u51e6\u7406<\/h3>\n\n\n\n<p>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u3068\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u4e00\u9023\u306e\u5909\u66f4\u64cd\u4f5c\u30921\u3064\u306e\u5358\u4f4d\u3068\u3057\u3066\u307e\u3068\u3081\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u4e2d\u306b\u4f8b\u5916\u3084\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u3089\u3001\u305d\u308c\u307e\u3067\u306e\u5909\u66f4\u3092\u306a\u304b\u3063\u305f\u3053\u3068\u306b\u3067\u304d\u307e\u3059\u3002Peewee\u3067\u306f\u3001atomic\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u3067\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u3092\u5236\u5fa1\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">with db.atomic() as transaction:  \n    try:\n        user = User.create(username='john')\n        Tweet.create(user=user, message='Hello')\n    except IntegrityError:\n        # \u4e00\u610f\u5236\u7d04\u30a8\u30e9\u30fc\u306a\u3069\u306e\u5834\u5408\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\n        transaction.rollback()\n    else:  \n        # \u51e6\u7406\u304c\u6210\u529f\u3057\u305f\u3089\u30b3\u30df\u30c3\u30c8\n        transaction.commit()<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210\u3057\u30c4\u30a4\u30fc\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u51e6\u7406\u3092\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u3068\u3057\u3066\u307e\u3068\u3081\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4f8b\u5916\u304c\u767a\u751f\u3057\u305f\u3089\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u3057\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u5909\u66f4\u524d\u306e\u72b6\u614b\u306b\u623b\u3057\u307e\u3059\u3002else\u30d6\u30ed\u30c3\u30af\u307e\u3067\u5230\u9054\u3067\u304d\u308c\u3070\u3001commit\u3067\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u7d50\u679c\u3092\u78ba\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>atomic\u30d6\u30ed\u30c3\u30af\u5185\u3067\u30cd\u30b9\u30c8\u3057\u305f\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u3092\u4f5c\u308b\u3053\u3068\u3082\u3067\u304d\u3001\u67d4\u8edf\u306a\u5236\u5fa1\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u7ba1\u7406<\/h3>\n\n\n\n<p>\u958b\u767a\u3092\u9032\u3081\u3066\u3044\u304f\u3068\u30e2\u30c7\u30eb\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5909\u66f4\u3057\u305f\u304f\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u306e\u969b\u3001\u5909\u66f4\u5185\u5bb9\u306b\u5408\u308f\u305b\u3066\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u3082\u4fee\u6b63\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u305d\u308c\u3092\u7ba1\u7406\u3059\u308b\u306e\u304c\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u3059\u3002<\/p>\n\n\n\n<p>Peewee\u306b\u306fpwiz\u3068\u3044\u3046\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u304c\u4ed8\u5c5e\u3057\u3066\u304a\u308a\u3001\u30b3\u30de\u30f3\u30c9\u4e00\u767a\u3067\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ python -m pwiz -e mysql -u user -P password my_database &gt; migration.py  <\/pre>\n\n\n\n<p>\u51fa\u529b\u3055\u308c\u308b\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30e2\u30c7\u30eb\u3068DB\u306e\u30b9\u30ad\u30fc\u30de\u5dee\u5206\u3092\u8868\u3059Python\u30b9\u30af\u30ea\u30d7\u30c8\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u81ea\u52d5\u751f\u6210\u3055\u308c\u305f\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u78ba\u8a8d\u3057\u3001migrate\u3068rollback\u306e\u95a2\u6570\u3092\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u4fee\u6b63\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from peewee import *\n\ndef migrate(migrator, database, **kwargs):\n    # users\u30c6\u30fc\u30d6\u30eb\u306bage\u30ab\u30e9\u30e0\u3092\u8ffd\u52a0\n    migrator.add_column('users', 'age', IntegerField(null=True))\n\ndef rollback(migrator, database, **kwargs):\n    # users\u30c6\u30fc\u30d6\u30eb\u306eage\u30ab\u30e9\u30e0\u3092\u524a\u9664\n    migrator.drop_column('users', 'age')<\/pre>\n\n\n\n<p>\u4fee\u6b63\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001migrate\u30b3\u30de\u30f3\u30c9\u3067\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ python migration.py<\/pre>\n\n\n\n<p>\u5fc5\u8981\u306b\u5fdc\u3058\u3066rollback\u3082\u5b9f\u884c\u3067\u304d\u3001\u30e2\u30c7\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30b9\u30ad\u30fc\u30de\u3092\u5e38\u306b\u540c\u671f\u3055\u305b\u3089\u308c\u308b\u306e\u304c\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5229\u70b9\u3067\u3059\u306d\u3002<\/p>\n\n\n\n<p>\u5fdc\u7528\u7684\u306a\u6a5f\u80fd\u3082\u4e00\u901a\u308a\u62bc\u3055\u3048\u305f\u3068\u3053\u308d\u3067\u3001\u6b21\u306f\u3044\u3088\u3044\u3088Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u3064\u3044\u3066\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-13\">Peewee\u3092\u4f7f\u3063\u305fWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">Flask\u7b49\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u9023\u643a<\/h3>\n\n\n\n<p>Python\u306eWeb\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e2d\u3067\u3082\u30b7\u30f3\u30d7\u30eb\u3067\u4f7f\u3044\u3084\u3059\u3044Flask\u306f\u3001Peewee\u306eORM\u3068\u975e\u5e38\u306b\u76f8\u6027\u304c\u826f\u3044\u3067\u3059\u3002<code>flask-peewee<\/code>\u62e1\u5f35\u3092\u4f7f\u3048\u3070\u3001Flask\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067Peewee\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u3092\u4e00\u5143\u7ba1\u7406\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from flask import Flask\nfrom flask_peewee.db import Database\n\napp = Flask(__name__)\napp.config.from_object('config.Configuration')\ndb = Database(app)\n\nclass User(db.Model):\n    username = CharField(unique=True)\n\n@app.route('\/users\/&lt;username&gt;')\ndef user_detail(username):\n    user = User.get(User.username == username)\n    return render_template('user_detail.html', user=user)<\/pre>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306econfig\u3067\u63a5\u7d9a\u60c5\u5831\u3092\u8a2d\u5b9a\u3057\u305f\u4e0a\u3067\u3001<code>Database<\/code>\u30af\u30e9\u30b9\u306bapp\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u6e21\u3059\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u3042\u3068\u306f\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3067\u6307\u5b9a\u3057\u305f\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u30d3\u30e5\u30fc\u95a2\u6570\u5185\u3067\u3001\u901a\u5e38\u306ePeewee\u30e2\u30c7\u30eb\u3068\u540c\u3058\u3088\u3046\u306b\u30af\u30a8\u30ea\u3092\u767a\u884c\u3059\u308b\u3060\u3051\u3002<\/p>\n\n\n\n<p>\u30d3\u30e5\u30fc\u95a2\u6570\u304b\u3089\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u30e2\u30c7\u30eb\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6e21\u305b\u3070\u3001html\u304b\u3089\u3082\u30e2\u30c7\u30eb\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u306e\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u99c6\u52d5\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u958b\u767a\u3067\u304d\u307e\u3059\u306d\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08<\/h3>\n\n\n\n<p>Peewee\u3068Flask\u3092\u4f7f\u3063\u305fWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u69cb\u6210\u306b\u306a\u308b\u306e\u304c\u4e00\u822c\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30c7\u30eb\u5c64: Peewee\u306e\u30e2\u30c7\u30eb\u30af\u30e9\u30b9\u3092\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u30d3\u30e5\u30fc\u5c64: Flask\u306eBlueprint\u30fb\u30d3\u30e5\u30fc\u95a2\u6570\u3092\u8a18\u8ff0<\/li>\n\n\n\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5c64: Jinja2\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u8868\u793a\u3092\u5236\u5fa1<\/li>\n\n\n\n<li>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u5c64: \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u8a18\u8ff0<\/li>\n<\/ul>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306b\u30e1\u30a4\u30f3\u306e\u30ed\u30b8\u30c3\u30af\u3092\u66f8\u304d\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066Peewee\u30e2\u30c7\u30eb\u3092\u30d3\u30e5\u30fc\u95a2\u6570\u306b\u6e21\u3059\u3053\u3068\u3067\u3001MVC\u30e9\u30a4\u30af\u306a\u69cb\u6210\u306b\u3067\u304d\u307e\u3059\u3002Flask\u306e<code>Blueprint<\/code>\u3092\u4f7f\u3048\u3070\u6a5f\u80fd\u3054\u3068\u306b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u5b9a\u7fa9\u3067\u304d\u308b\u306e\u3067\u3001\u898f\u6a21\u306e\u5927\u304d\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3082\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3092\u4fdd\u3061\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u306e\u8907\u6570\u306e\u7b87\u6240\u304b\u3089\u5229\u7528\u3059\u308b\u305f\u3081\u3001\u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u4e00\u5143\u7ba1\u7406\u3059\u308b\u306e\u304c\u304a\u3059\u3059\u3081\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3068\u306e\u76f8\u6027<\/h3>\n\n\n\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u54c1\u8cea\u3092\u4fdd\u3064\u305f\u3081\u306b\u306f\u3001\u81ea\u52d5\u30c6\u30b9\u30c8\u304c\u6b20\u304b\u305b\u307e\u305b\u3093\u3002Peewee\u3092\u4f7f\u3063\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3082\u4f8b\u5916\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p>\u307e\u305a\u30e2\u30c7\u30eb\u5c64\u306e\u5358\u4f53\u30c6\u30b9\u30c8\u304b\u3089\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002\u30c6\u30b9\u30c8\u7528\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u7528\u610f\u3057\u3066\u304a\u304d\u3001\u5404\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u5b9f\u884c\u3059\u308b\u3054\u3068\u306b\u521d\u671f\u30c7\u30fc\u30bf\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def test_user_creation(self):\n    with test_database.transaction() as txn:\n        User.create(username='john')\n        self.assertEqual(User.select().count(), 1)\n        txn.rollback()<\/pre>\n\n\n\n<p><code>test_database<\/code>\u306f\u30c6\u30b9\u30c8\u7528\u306b\u7528\u610f\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u3067\u3059\u3002\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u5185\u3067\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u3092\u958b\u59cb\u3057\u3001\u691c\u8a3c\u304c\u7d42\u308f\u3063\u305f\u3089\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u3001\u5404\u30c6\u30b9\u30c8\u3092\u72ec\u7acb\u3057\u3066\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3068\u30d3\u30e5\u30fc\u306e\u30c6\u30b9\u30c8\u306b\u306f\u3001Flask\u306e\u30c6\u30b9\u30c8\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def test_user_detail(self):\n    User.create(username='john')\n    response = self.app.get('\/users\/john')\n    self.assertIn('john', response.data)<\/pre>\n\n\n\n<p>POST\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30c6\u30b9\u30c8\u3082\u3001\u540c\u3058\u3088\u3046\u306b\u5b9f\u884c\u3067\u304d\u307e\u3059\u306d\u3002<\/p>\n\n\n\n<p>\u30e2\u30c7\u30eb\u5c64\u306e\u51e6\u7406\u3092\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306b\u9589\u3058\u8fbc\u3081\u3066\u304a\u3051\u3070\u3001\u5916\u90e8\u304b\u3089\u306f\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5dee\u3057\u66ff\u3048\u3066\u30c6\u30b9\u30c8\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Mockito\u306a\u3069\u306e\u30e2\u30c3\u30af\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3048\u3070\u3001Peewee\u306e\u30af\u30a8\u30ea\u767a\u884c\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3057\u306a\u304c\u3089\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u30ed\u30b8\u30c3\u30af\u3092\u30c6\u30b9\u30c8\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>Peewee\u306e\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u611f\u7684\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u306e\u304a\u304b\u3052\u3067\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u7d44\u307f\u5408\u308f\u305b\u305f\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3082\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u3089\u308c\u305d\u3046\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u6b21\u306f\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u308b\u3068\u304d\u306eTips\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">Peewee\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30b3\u30fc\u30c9\u4f8b\u3067\u5b66\u3076\u5b9f\u8df5\u7684\u306a\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>Peewee\u3092\u4f7f\u3044\u3053\u306a\u3059\u306b\u306f\u3001\u30e2\u30c7\u30eb\u5b9a\u7fa9\u3068\u30af\u30a8\u30ea\u306e\u66f8\u304d\u65b9\u306e\u30b3\u30c4\u3092\u62bc\u3055\u3048\u3066\u304a\u304f\u3053\u3068\u304c\u5927\u5207\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305a\u30e2\u30c7\u30eb\u5b9a\u7fa9\u3067\u306f\u4ee5\u4e0b\u306e\u70b9\u306b\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a3\u30fc\u30eb\u30c9\u540d\u306f\u308f\u304b\u308a\u3084\u3059\u3044\u3082\u306e\u3092\u9078\u3076\u3002\u7565\u8a9e\u3092\u4f7f\u308f\u305a\u3001\u660e\u793a\u7684\u306a\u540d\u524d\u3092\u3064\u3051\u308b\u3002<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u578b\u306b\u5408\u308f\u305b\u3066\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3084NULL\u5236\u7d04\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3059\u308b\u3002<\/li>\n\n\n\n<li>\u3088\u304f\u4f7f\u3046\u30af\u30a8\u30ea\u306f\u30af\u30e9\u30b9\u30e1\u30bd\u30c3\u30c9\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u3066\u304a\u304f\u3068\u4fbf\u5229\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class User(Model):\n    username = CharField(unique=True)\n    email = CharField(index=True)\n    is_active = BooleanField(default=True)\n\n    @classmethod\n    def active_users(cls):\n        return cls.select().where(cls.is_active == True)<\/pre>\n\n\n\n<p>\u30af\u30a8\u30ea\u3092\u66f8\u304f\u3068\u304d\u306f\u3001select\u3067\u53d6\u5f97\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u7d5e\u308a\u8fbc\u3080\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">User.select(User.username).join(Tweet).where(Tweet.content.contains('Peewee'))<\/pre>\n\n\n\n<p>\u95a2\u9023\u30c6\u30fc\u30d6\u30eb\u306e\u30c7\u30fc\u30bf\u3082\u4e00\u7dd2\u306b\u53d6\u5f97\u3057\u305f\u3044\u3068\u304d\u306f\u3001eager\u30ed\u30fc\u30c9\u3092\u4f7f\u3046\u3068\u52b9\u7387\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Tweet.select(Tweet, User).join(User).where(User.username=='john')<\/pre>\n\n\n\n<p>IN\u3084EXISTS\u3092\u4f7f\u3048\u3070\u3001\u90e8\u5206\u4e00\u81f4\u691c\u7d22\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6539\u5584\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">usernames = ['john', 'paul', 'george', 'ringo']\nUser.select().where(User.username.in_(usernames))<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u610f\u8b58\u3057\u305f\u30af\u30a8\u30ea\u306e\u66f8\u304d\u65b9<\/h3>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u3067\u306f\u3001\u307e\u305a\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u8a08\u753b\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">query = Tweet.select() \nprint(query.explain())<\/pre>\n\n\n\n<p>\u5b9f\u884c\u8a08\u753b\u3092\u898b\u308b\u3068\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u6709\u52b9\u306b\u4f7f\u308f\u308c\u3066\u3044\u308b\u304b\u304c\u308f\u304b\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u8907\u96d1\u306a\u30af\u30a8\u30ea\u306f\u3001\u30a6\u30a3\u30f3\u30c9\u30a6\u95a2\u6570\u3084\u5171\u901a\u30c6\u30fc\u30d6\u30eb\u5f0f\u3092\u4f7f\u3063\u3066\u5206\u5272\u3059\u308b\u3068\u8aad\u307f\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">subquery = Tweet.select(\n    Tweet.user,  \n    fn.COUNT(Tweet.id).over(partition_by=[Tweet.user]).alias('count')\n).alias('subquery')\n\nquery = (User\n         .select(User, subquery.c.count)\n         .join(subquery, on=(User.id == subquery.c.user_id)))  <\/pre>\n\n\n\n<p>\u5927\u91cf\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u66f4\u65b0\u3059\u308b\u3068\u304d\u306f\u3001\u30d0\u30eb\u30af\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u4f7f\u3044\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Tweet.update(content='').where(User.username=='john').execute()<\/pre>\n\n\n\n<p>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5206\u96e2\u30ec\u30d9\u30eb\u3092\u9069\u5207\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30ed\u30c3\u30af\u7af6\u5408\u3092\u9632\u3052\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306b\u914d\u616e\u3057\u305f\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0<\/h3>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u57fa\u672c\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u5165\u529b\u3092\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3059\u308b\u3053\u3068\u3067\u3059\u3002<br>\u4e0d\u6b63\u306a\u5024\u306f\u3001\u30a8\u30b9\u30b1\u30fc\u30d7\u51e6\u7406\u3092\u884c\u3044\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306f\u3001\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u3092\u4f7f\u3046\u3053\u3068\u3067\u9632\u3052\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def login(username, password):\n    try:\n        user = User.get(User.username == username)\n        if check_password(password, user.password_hash):\n            return user  \n    except User.DoesNotExist:\n        pass<\/pre>\n\n\n\n<p>\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u3001\u5358\u65b9\u5411\u306e\u30cf\u30c3\u30b7\u30e5\u95a2\u6570\u3067\u30cf\u30c3\u30b7\u30e5\u5316\u3057\u3066\u304b\u3089\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def encrypt_password(password):\n    return bcrypt.hashpw(password, bcrypt.gensalt())<\/pre>\n\n\n\n<p>\u91cd\u8981\u306a\u30c7\u30fc\u30bf\u306f\u3001SSL\u3067\u6697\u53f7\u5316\u3057\u3066\u901a\u4fe1\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4f7f\u3046\u5074\u306b\u4fbf\u5229\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u63d0\u4f9b\u3057\u3064\u3064\u3001\u5185\u90e8\u3067\u306f\u30bb\u30ad\u30e5\u30a2\u306a\u30ed\u30b8\u30c3\u30af\u3092\u96a0\u853d\u3059\u308b\u3002<br>\u3053\u308c\u3053\u305d\u304cPeewee\u306e\u3088\u3046\u306aORM\u30c4\u30fc\u30eb\u306b\u6c42\u3081\u3089\u308c\u308b\u5f79\u5272\u3060\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>\u6700\u5f8c\u306b\u3001Peewee\u306e\u4f7f\u3044\u3069\u3053\u308d\u3092\u307e\u3068\u3081\u3064\u3064\u3001\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u7de0\u3081\u304f\u304f\u308a\u3068\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">\u307e\u3068\u3081\uff1aPeewee\u3092\u4f7f\u3044\u3053\u306a\u305d\u3046\uff01<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">Peewee\u306e\u30e1\u30ea\u30c3\u30c8\u3068\u5411\u3044\u3066\u3044\u308b\u30b1\u30fc\u30b9<\/h3>\n\n\n\n<p>Peewee\u306e\u6700\u5927\u306e\u9b45\u529b\u306f\u3001SQL\u3092\u76f4\u63a5\u66f8\u304b\u305a\u306bPython\u306e\u30b3\u30fc\u30c9\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u64cd\u4f5c\u3067\u304d\u308b\u3053\u3068\u3067\u3059\u3002<br>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u611f\u899a\u3067\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6271\u3048\u308b\u306e\u3067\u3001\u958b\u767a\u8005\u306b\u3068\u3063\u3066\u7406\u89e3\u3057\u3084\u3059\u304f\u3001\u30b3\u30fc\u30c9\u306e\u751f\u7523\u6027\u3082\u4e0a\u304c\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>Peewee\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u611f\u7684\u306aAPI\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u3044\u306e\u3082\u5927\u304d\u306a\u5229\u70b9\u3067\u3059\u3002<br>ORM\u3092\u4f7f\u3063\u305f\u958b\u767a\u306e\u7d4c\u9a13\u304c\u5c11\u306a\u3044\u30c1\u30fc\u30e0\u3067\u3082\u3001\u77ed\u671f\u9593\u3067\u5c0e\u5165\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>Flask\u306a\u3069\u306e\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068Peewee\u306e\u76f8\u6027\u306e\u826f\u3055\u306f\u3001\u5c0f\u301c\u4e2d\u898f\u6a21\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u7279\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002<br>\u6a5f\u68b0\u5b66\u7fd2\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3084\u30c7\u30fc\u30bf\u96c6\u7d04\u30b5\u30fc\u30d3\u30b9\u306eAPI\u306a\u3069\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6d3b\u7528\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u7d20\u65e9\u304f\u7acb\u3061\u4e0a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from flask import Flask\nfrom flask_peewee.db import Database\nfrom peewee import *\n\napp = Flask(__name__)\ndb = Database(app)\n\nclass User(db.Model):\n    username = CharField()\n    email = CharField()\n\n@app.route('\/')\ndef index():\n    users = User.select()\n    return render_template('index.html', users=users)<\/pre>\n\n\n\n<p>Django\u306e\u3088\u3046\u306a\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u3079\u308b\u3068\u3001Peewee\u306f\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3084\u30e2\u30c7\u30eb\u5b9a\u7fa9\u306e\u81ea\u52d5\u751f\u6210\u306a\u3069\u306e\u6a5f\u80fd\u3092\u6a19\u6e96\u3067\u6301\u305f\u306a\u3044\u305f\u3081\u3001\u305d\u306e\u5206\u958b\u767a\u8005\u5074\u3067\u306e\u8a2d\u8a08\u3084\u5b9f\u88c5\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002<br>\u3057\u304b\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u81ea\u7531\u306b\u6c7a\u3081\u3089\u308c\u308b\u3068\u3044\u3046\u30e1\u30ea\u30c3\u30c8\u3082\u3042\u308b\u306e\u3067\u3001\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u67d4\u8edf\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u3055\u3089\u306b\u5b66\u7fd2\u3092\u9032\u3081\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9<\/h3>\n\n\n\n<p>Peewee\u306b\u306f\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3084GitHub\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u8c4a\u5bcc\u306a\u30ea\u30bd\u30fc\u30b9\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u306f\u3001API\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3060\u3051\u3067\u306a\u304f\u3001\u30af\u30a4\u30c3\u30af\u30b9\u30bf\u30fc\u30c8\u3084\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3082\u3042\u308b\u306e\u3067\u3001\u4f53\u7cfb\u7684\u306b\u5b66\u7fd2\u3092\u9032\u3081\u3089\u308c\u307e\u3059\u3002<br><a href=\"http:\/\/docs.peewee-orm.com\/\">http:\/\/docs.peewee-orm.com\/<\/a><\/p>\n\n\n\n<p>GitHub\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u306f\u3001Peewee\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8aad\u3093\u3067\u5185\u90e8\u69cb\u9020\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br>\u307e\u305f\u3001examples\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u306f\u3001\u6570\u591a\u304f\u306e\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u304c\u3042\u308b\u306e\u3067\u3001\u5b9f\u969b\u306e\u4f7f\u3044\u65b9\u3092\u5b66\u3076\u306e\u306b\u3082\u5f79\u7acb\u3064\u3067\u3057\u3087\u3046\u3002<br><a href=\"https:\/\/github.com\/coleifer\/peewee\">https:\/\/github.com\/coleifer\/peewee<\/a><\/p>\n\n\n\n<p>\u66f8\u7c4d\u3067\u306f\u3001\u300eMaking Queries with Peewee ORM\u300f\u304c\u304a\u3059\u3059\u3081\u3067\u3059\u3002<br>Peewee\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u304b\u3089\u5fdc\u7528\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u307e\u3067\u3092\u7db2\u7f85\u7684\u306b\u89e3\u8aac\u3057\u3066\u3044\u308b\u306e\u3067\u3001\u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p>Flask\u3068\u9023\u643a\u3057\u3066Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u306a\u3089\u3001Flask-Peewee\u3068\u3044\u3046\u30b9\u30bf\u30fc\u30bf\u30fc\u30ad\u30c3\u30c8\u3092\u4f7f\u3063\u3066\u307f\u308b\u306e\u3082\u826f\u3044\u3067\u3057\u3087\u3046\u3002<br>\u8a8d\u8a3c\u6a5f\u80fd\u3084\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u306a\u3069\u306e\u57fa\u672c\u7684\u306a\u6a5f\u80fd\u304c\u63c3\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u3059\u3050\u306b\u958b\u767a\u3092\u59cb\u3081\u3089\u308c\u307e\u3059\u3002<br><a href=\"https:\/\/github.com\/coleifer\/flask-peewee\">https:\/\/github.com\/coleifer\/flask-peewee<\/a><\/p>\n\n\n\n<p>Peewee\u3092\u4f7f\u3063\u305f\u5b9f\u8df5\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u30ce\u30a6\u30cf\u30a6\u3092\u5b66\u3076\u306a\u3089\u3001\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u53c2\u8003\u306b\u3059\u308b\u306e\u304c\u304a\u3059\u3059\u3081\u3067\u3059\u3002<br>\u4f8b\u3048\u3070\u3001Peewee\u306e\u4f5c\u8005\u304c\u958b\u767a\u3057\u3066\u3044\u308b\u30bf\u30b9\u30af\u30ad\u30e5\u30fc\u306e<a href=\"https:\/\/github.com\/coleifer\/huey\/tree\/master\/huey\">Huey<\/a>\u306f\u3001Peewee\u3067\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\u3092\u5b9a\u7fa9\u3057\u3001\u30ef\u30fc\u30ab\u30fc\u30d7\u30ed\u30bb\u30b9\u3092\u7ba1\u7406\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u826f\u3044\u898b\u672c\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u901a\u3057\u3066\u3001Peewee\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u304b\u3089\u5fdc\u7528\u7684\u306a\u6a5f\u80fd\u3001\u5b9f\u8df5\u7684\u306a\u30ce\u30a6\u30cf\u30a6\u307e\u3067\u3092\u4e00\u901a\u308a\u5b66\u3093\u3067\u3044\u305f\u3060\u3051\u305f\u304b\u3068\u601d\u3044\u307e\u3059\u3002<br>Peewee\u3067Python\u30e9\u30a4\u30af\u306a\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u306a\u304c\u3089\u3001SQL\u306e\u77e5\u8b58\u3082\u6df1\u3081\u3066\u3044\u3051\u3070\u3001\u3088\u308a\u5805\u7262\u3067\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u4f5c\u308c\u308b\u3088\u3046\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002<br>\u305c\u3072\u958b\u767a\u73fe\u5834\u3067\u6d3b\u7528\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Python\u3067Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u306a\u3089\u3001ORM\u306e\u4f7f\u3044\u65b9\u3092\u899a\u3048\u3066\u304a\u304f\u3068\u52b9\u7387\u7684\u306b\u958b\u767a\u3092\u9032\u3081\u3089\u308c\u307e\u3059\u3002\u4e2d\u3067\u3082Peewee\u306f\u3001\u8efd\u91cf\u3067\u30b7\u30f3\u30d7\u30eb\u306a\u8a2d\u8a08\u304c\u7279\u5fb4\u306e\u4eba\u6c17ORM\u3067\u3001Flask\u306a\u3069\u306e\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u76f8\u6027\u629c\u7fa4 &#8230; <\/p>\n","protected":false},"author":1,"featured_media":558,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":{"0":"post-556","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-python"},"_links":{"self":[{"href":"https:\/\/chocottopro.com\/index.php?rest_route=\/wp\/v2\/posts\/556","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chocottopro.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chocottopro.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chocottopro.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chocottopro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=556"}],"version-history":[{"count":2,"href":"https:\/\/chocottopro.com\/index.php?rest_route=\/wp\/v2\/posts\/556\/revisions"}],"predecessor-version":[{"id":559,"href":"https:\/\/chocottopro.com\/index.php?rest_route=\/wp\/v2\/posts\/556\/revisions\/559"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chocottopro.com\/index.php?rest_route=\/wp\/v2\/media\/558"}],"wp:attachment":[{"href":"https:\/\/chocottopro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chocottopro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chocottopro.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}