{"id":679,"date":"2011-06-20T11:39:48","date_gmt":"2011-06-20T08:39:48","guid":{"rendered":"http:\/\/seriyps.ru\/blog\/?p=679"},"modified":"2011-07-06T02:03:07","modified_gmt":"2011-07-05T23:03:07","slug":"django-orm-standalone","status":"publish","type":"post","link":"https:\/\/seriyps.com\/blog\/2011\/06\/20\/django-orm-standalone\/","title":{"rendered":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Django ORM \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 Django"},"content":{"rendered":"<p>\u041f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Django ORM \u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0430\u043c\u043e\u0439 Django. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0449\u0435 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SQLAlchemy \u0442.\u043a. \u043e\u043d\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u0442\u0430\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0443\u043a\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0411\u0414 \u0438 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c. \u0412\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0448\u0438\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 Django, \u0430 \u0432 \u043f\u0430\u0443\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435-\u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0432\u0430\u0436\u0434\u044b. \u0422.\u043a. \u043f\u0430\u0443\u043a \u0431\u044b\u043b \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0440\u0430\u0431\u043e\u0442 \u0430 \u0430\u0434\u043c\u0438\u043d\u043a\u0430 &#8211; \u0432\u0442\u043e\u0440\u044b\u043c, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0437 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f &#8220;syncdb&#8221;.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043a\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f\u00a0<a title=\"stanfalone Django ORM module\" href=\"https:\/\/bitbucket.org\/rfc1437\/django-standalone\">django-standalone<\/a> \u0438\u00a0\u0441\u0442\u0430\u0442\u044c\u044e <a title=\"standalone Django ORM\" href=\"http:\/\/imbolc.name\/2009\/12\/django-orm.html\">Django ORM \u0431\u0435\u0437 \u0414\u0436\u0430\u043d\u0433\u0438<\/a> &#8211;\u00a0\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432:<\/p>\n<ul>\n<li>\u041c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/li>\n<li>\u041d\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438<\/li>\n<li>\u041f\u043e &#8211; \u043c\u0435\u043b\u043e\u0447\u0438 &#8211; \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c app_label<\/li>\n<\/ul>\n<p>\u041f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438.<\/p>\n<p><!--more-->\u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e, \u0447\u0442\u043e \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c Django \u043d\u0430\u0441 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Django:<\/p>\n<p><code class=\"bash\">sudo pip install Django<\/code><\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0440\u0430\u0437\u0443 \u043a\u043e\u0434 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438<\/p>\n<pre><code>#\/usr\/bin\/env python\n# -*- coding: utf8 -*-\n\nfrom django.conf import settings\nsettings.configure(\n    # \u0437\u0430\u0434\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414\n    DATABASES={\n        &#039;default&#039;: {\n            &#039;ENGINE&#039;: &#039;postgresql_psycopg2&#039;, # Add &#039;postgresql_psycopg2&#039;, &#039;postgresql&#039;, &#039;mysql&#039;, &#039;sqlite3&#039; or &#039;oracle&#039;.\n            &#039;NAME&#039;: &#039;***&#039;, # Or path to database file if using sqlite3.\n            &#039;USER&#039;: &#039;***&#039;, # Not used with sqlite3.\n            &#039;PASSWORD&#039;: &#039;***&#039;, # Not used with sqlite3.\n            &#039;HOST&#039;: &#039;****&#039;, # Set to empty string for localhost. Not used with sqlite3.\n            &#039;PORT&#039;: &#039;****&#039;, # Set to empty string for default. Not used with sqlite3.\n        }\n    },\n    # \u044d\u0442\u043e\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043a \u0438\u043c\u0435\u043d\u0430\u043c \u0442\u0430\u0431\u043b\u0438\u0446 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\n    # \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\n    # Django \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043b\u0443\u0447\u0448\u0435 \u0443\u0431\u0440\u0430\u0442\u044c.\n    STANDALONE_APP_NAME=&#039;some_prefix&#039;\n)\n\nfrom django.db import models\n\n\nclass StandAloneMetaclass(models.base.ModelBase):\n    &quot;&quot;&quot;\u041c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u0435\u0442 app_label \u043c\u043e\u0434\u0435\u043b\u044f\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f\n    \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 STANDALONE_APP_NAME&quot;&quot;&quot;\n    def __new__(cls, name, bases, attrs):\n        app_name = settings.STANDALONE_APP_NAME or None\n        if app_name:\n            if &#039;Meta&#039; in attrs:\n                if not hasattr(attrs[&#039;Meta&#039;], &#039;app_label&#039;):\n                    # \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c app_label \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0436\u0435 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0441\u0430\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438\n                    setattr(attrs[&#039;Meta&#039;], &#039;app_label&#039;, app_name)\n        return super(StandAloneMetaclass, cls).__new__(cls, name, bases, attrs)\n\n\nclass BlogNote(models.Model):\n    __metaclass__ = StandAloneMetaclass  # \u0432\u0441\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044f\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\n    text=models.TextField()\n    # \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 Meta \u0432\u0441\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044f\u043c \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430\n    class Meta:\n        pass\n\n\nclass BlogComment(models.Model):\n    __metaclass__ = StandAloneMetaclass\n    text=models.TextField()\n    note=models.ForeignKey(BlogNote)  # \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442\n\n    class Meta:\n        pass\n\n\ndef create_tables(tables):\n    from django.db import connection, transaction\n    from django.core.management.color import no_style\n    pending_references = {}  # \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043e\u043b\u044e\u0447\u0435\u0439, \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\n    seen_models = set()  # \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445\n    style = no_style()  # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e SQL\n    for model in tables:  # \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043c\u043e\u0434\u0435\u043b\u0435\u0439\n        sql, references = connection.creation.sql_create_model(model, style) # \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c SQL \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439\n        seen_models.add(model)\n        for refto, refs in references.items():\n            pending_references.setdefault(refto, []).extend(refs)\n            if refto in seen_models:\n                sql.extend(  # \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442, \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0430\u043c \u043a\u043b\u044e\u0447\n                    connection.creation.sql_for_pending_references(\n                            refto,\n                            style,\n                            pending_references))\n        sql.extend(\n            connection.creation.sql_for_pending_references(\n                model,\n                style,\n                pending_references))\n        cursor = connection.cursor()\n        for stmt in sql:  # \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0411\u0414\n            print stmt\n            try:\n                cursor.execute(stmt)\n            except Exception, e:\n                print e\n                pass\n        print\n    transaction.commit_unless_managed()  # \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e\n    for model in tables:  # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b\n        index_sql = connection.creation.sql_indexes_for_model(model, style)\n        if index_sql:\n            try:\n                for stmt in index_sql:\n                    print stmt\n                    cursor.execute(stmt)\n            except Exception, e:\n                transaction.rollback_unless_managed()\n            else:\n                transaction.commit_unless_managed()\n\n\nif __name__ == &quot;__main__&quot;:\n    # \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b Django \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u0438\u0445\n    # \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0411\u0414\n    create_tables(model for model in locals().values() if type(model) == StandAloneMetaclass)<\/code><\/pre>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e create_table() \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <a title=\"syncdb\" href=\"https:\/\/code.djangoproject.com\/browser\/django\/trunk\/django\/core\/management\/commands\/syncdb.py\">django\/core\/management\/commands\/syncdb.py<\/a>. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043e\u0442\u043f\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 app_label \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u041d\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c <code>__metaclass__<\/code>. \u0423\u0441\u043f\u043e\u043a\u0430\u0438\u0432\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u041d\u0443 \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c <code>class Meta: pass<\/code>. \u041c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u044d\u0442\u0438\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0442 \u043d\u0435\u0433\u043e.<\/p>\n<p>\u041d\u0443 \u0438 \u043e\u0431\u0449\u0435\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 &#8211; Django ORM \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u00a0Django. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a title=\"SQLAlchemy Python ORM\" href=\"http:\/\/www.sqlalchemy.org\/\">SQLAlchemy<\/a>. \u041e\u043d\u0430 \u0445\u043e\u0442\u044c \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0430 \u0434\u043b\u044f \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u0430\u044f, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0443\u043b\u043b\u0438\u043d\u0433 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439, \u0431\u043e\u043b\u0435\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u0442\u0430\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Django ORM \u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0430\u043c\u043e\u0439 Django. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u0440\u043e\u0449\u0435 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SQLAlchemy \u0442.\u043a. \u043e\u043d\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u0442\u0430\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0443\u043a\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0411\u0414 \u0438 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c. \u0412\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0448\u0438\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 Django, \u0430 \u0432 \u043f\u0430\u0443\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435-\u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117],"tags":[186,187,249,189,190,188],"class_list":["post-679","post","type-post","status-publish","format-standard","hentry","category-python","tag-django","tag-orm","tag-python","tag-sql","tag-standalone","tag-kostyli"],"_links":{"self":[{"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/posts\/679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/comments?post=679"}],"version-history":[{"count":9,"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/posts\/679\/revisions"}],"predecessor-version":[{"id":682,"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/posts\/679\/revisions\/682"}],"wp:attachment":[{"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/media?parent=679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/categories?post=679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/seriyps.com\/blog\/wp-json\/wp\/v2\/tags?post=679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}