{"title":"Integrazione di Django con database obsoleti","version":"3.2","locale":"it","docname":"howto/legacy-databases","url":"/it/3.2/howto/legacy-databases/","canonical":"https://djangodocs.dev/it/3.2/howto/legacy-databases/","summary":"Mentre Django è adatto a sviluppare nuove applicazioni, e tuttavia possibile integrarlo con database obsoleti.","html":"<h1>Integrazione di Django con database obsoleti<a class=\"heading-anchor\" href=\"#integrating-django-with-a-legacy-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Mentre Django è adatto a sviluppare nuove applicazioni, e tuttavia possibile integrarlo con database obsoleti. Django include alcuni strumenti per automatizzare il più possibile il processo.</p>\n<p>Questo documento presume che tu sappia le basi di Django, come ?descritto? nella sezione <a class=\"reference internal\" href=\"/it/3.2/intro/tutorial01/\"><span class=\"doc\">tutorial</span></a>.</p>\n<p>Once you’ve got Django set up, you’ll follow this general process to integrate\nwith an existing database.</p>\n<section id=\"give-django-your-database-parameters\">\n<h2>Dai a Django i tuoi parametri del database<a class=\"heading-anchor\" href=\"#give-django-your-database-parameters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>You’ll need to tell Django what your database connection parameters are, and\nwhat the name of the database is. Do that by editing the <a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\">DATABASES</code></a>\nsetting and assigning values to the following keys for the <code class=\"docutils literal notranslate\">'default'</code>\nconnection:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\">NAME</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-DATABASE-ENGINE\"><code class=\"xref std std-setting docutils literal notranslate\">ENGINE</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\">USER</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">PASSWORD</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-HOST\"><code class=\"xref std std-setting docutils literal notranslate\">HOST</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-PORT\"><code class=\"xref std std-setting docutils literal notranslate\">PORT</code></a></p></li>\n</ul>\n</section>\n<section id=\"auto-generate-the-models\">\n<h2>Generazione automatica dei modelli<a class=\"heading-anchor\" href=\"#auto-generate-the-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django comes with a utility called <a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/#django-admin-inspectdb\"><code class=\"xref std std-djadmin docutils literal notranslate\">inspectdb</code></a> that can create models\nby introspecting an existing database. You can view the output by running this\ncommand:</p>\n<div class=\"code-block\" data-language=\"bash\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ python manage.py inspectdb\n</code></pre></div>\n<p>Save this as a file by using standard Unix output redirection:</p>\n<div class=\"code-block\" data-language=\"bash\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ python manage.py inspectdb &gt; models.py\n</code></pre></div>\n<p>This feature is meant as a shortcut, not as definitive model generation. See the\n<a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/#django-admin-inspectdb\"><code class=\"xref std std-djadmin docutils literal notranslate\">documentation of inspectdb</code></a> for more information.</p>\n<p>Once you’ve cleaned up your models, name the file <code class=\"docutils literal notranslate\">models.py</code> and put it in\nthe Python package that holds your app. Then add the app to your\n<a class=\"reference internal\" href=\"/it/3.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> setting.</p>\n<p>By default, <a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/#django-admin-inspectdb\"><code class=\"xref std std-djadmin docutils literal notranslate\">inspectdb</code></a> creates unmanaged models. That is,\n<code class=\"docutils literal notranslate\">managed = False</code> in the model’s <code class=\"docutils literal notranslate\">Meta</code> class tells Django not to manage\neach table’s creation, modification, and deletion:</p>\n<div class=\"code-block\" data-language=\"bash\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>class Person<span class=\"o\">(</span>models.Model<span class=\"o\">)</span>:\n    <span class=\"nv\">id</span> <span class=\"o\">=</span> models.IntegerField<span class=\"o\">(</span><span class=\"nv\">primary_key</span><span class=\"o\">=</span>True<span class=\"o\">)</span>\n    <span class=\"nv\">first_name</span> <span class=\"o\">=</span> models.CharField<span class=\"o\">(</span><span class=\"nv\">max_length</span><span class=\"o\">=</span><span class=\"m\">70</span><span class=\"o\">)</span>\n    class Meta:\n       <span class=\"nv\">managed</span> <span class=\"o\">=</span> False\n       <span class=\"nv\">db_table</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;CENSUS_PERSONS&#39;</span>\n</code></pre></div>\n<p>If you do want to allow Django to manage the table’s lifecycle, you’ll need to\nchange the <a class=\"reference internal\" href=\"/it/3.2/ref/models/options/#django.db.models.Options.managed\" title=\"django.db.models.Options.managed\"><code class=\"xref py py-attr docutils literal notranslate\">managed</code></a> option above to <code class=\"docutils literal notranslate\">True</code>\n(or remove it because <code class=\"docutils literal notranslate\">True</code> is its default value).</p>\n</section>\n<section id=\"install-the-core-django-tables\">\n<h2>Install the core Django tables<a class=\"heading-anchor\" href=\"#install-the-core-django-tables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Next, run the <a class=\"reference internal\" href=\"/it/3.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> command to install any extra needed database\nrecords such as admin permissions and content types:</p>\n<div class=\"code-block\" data-language=\"bash\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>$ python manage.py migrate\n</code></pre></div>\n</section>\n<section id=\"test-and-tweak\">\n<h2>Test ed aggiustamenti<a class=\"heading-anchor\" href=\"#test-and-tweak\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Those are the basic steps – from here you’ll want to tweak the models Django\ngenerated until they work the way you’d like. Try accessing your data via the\nDjango database API, and try editing objects via Django’s admin site, and edit\nthe models file accordingly.</p>\n</section>","rootId":"integrating-django-with-a-legacy-database","toc":[{"title":"Dai a Django i tuoi parametri del database","anchor":"give-django-your-database-parameters","children":[]},{"title":"Generazione automatica dei modelli","anchor":"auto-generate-the-models","children":[]},{"title":"Install the core Django tables","anchor":"install-the-core-django-tables","children":[]},{"title":"Test ed aggiustamenti","anchor":"test-and-tweak","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"«How-to» guides","url":"/it/3.2/howto/"}],"prev":{"docname":"howto/initial-data","title":"Providing initial data for models","url":"/it/3.2/howto/initial-data/"},"next":{"docname":"howto/outputting-csv","title":"Outputting CSV with Django","url":"/it/3.2/howto/outputting-csv/"},"formats":{"html":"/it/3.2/howto/legacy-databases/","markdown":"/it/3.2/howto/legacy-databases.md","json":"/it/3.2/howto/legacy-databases.json"},"source":"https://github.com/django/django/blob/stable/3.2.x/docs/howto/legacy-databases.txt","official":"https://docs.djangoproject.com/it/3.2/howto/legacy-databases/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}