En utilisant uniquement la DB partie de Django
Est-ce que qqn sait comment "modulaire" est Django? Puis-je utiliser seulement la partie ORM, pour obtenir des classes que la carte de DB tables et de savoir comment lire/écrire à partir de ces tables?
Si non, que recommanderiez-vous comme "le Python équivalent de veille prolongée"?
- Dupliquer: stackoverflow.com/questions/302651/...
Vous devez vous connecter pour publier un commentaire.
La réponse est: non, vous ne pouvez pas utiliser l'ORM de Django séparément de Django.
La réponse est: oui, vous pouvez, si vous êtes disposé à charger de grandes parties de Django avec elle. Par exemple, la connexion de base de données qui est utilisé par Django est ouverte lorsqu'une demande de Django se produit. Cela se produit lorsqu'un signal est envoyé afin que vous peut manifestement envoyer ce signal pour ouvrir la connexion sans l'aide de la spécificité de la demande mécanisme. Aussi, vous aurez besoin pour l'installation de diverses applications et les paramètres pour le projet Django.
En fin de compte, il n'est sans doute pas utile de votre temps. SQL Alchimie est relativement bien connue Python ORM, qui est en fait plus puissant que de Django reinhardt, de toute façon, car il prend en charge plusieurs connexions de base de données de connexion et de mise en commun et d'autres bonnes choses.
Edit: en réponse à James critiques ailleurs, je vais préciser ce que j'ai décrit dans mon premier post. Alors qu'il est réjouissant de constater que l'un des principaux Django contributeur m'a appelé, je pense toujours que j'ai raison 🙂
Tout d'abord, pensez à ce qui doit être fait pour utiliser l'ORM de Django distincte de toute autre partie. Vous utilisez l'un des méthodes décrit par James pour faire une installation de base de Django. Mais un certain nombre de ces méthodes ne permettent pas à l'aide de la
syncdb
de commande, ce qui est nécessaire pour créer les tables pour vos modèles. Un settings.py fichier est nécessaire pour cela, avec des variables non seulement pourDATABASE_*
, mais aussiINSTALLED_APPLICATIONS
avec les chemins corrects pour tous models.py les fichiers.Il est possible de faire votre propre solution pour utiliser
syncdb
sans settings.py mais il nécessite des connaissances approfondies de Django. Bien sûr, vous n'avez pas besoin d'utilisersyncdb
; les tableaux peuvent être créés de façon indépendante des modèles. Mais il est un aspect de l'ORM qui n'est disponible que si vous mettez un peu d'effort dans le programme d'installation.Deuxièmement, examiner comment vous pouvez créer vos requêtes à la base de données avec le standard
Model.objects.filter()
appel. Si cela est fait dans le cadre d'un point de vue, c'est très simple: construire leQuerySet
et de visualiser les instances. Par exemple:Sympa, simple et propre. Maintenant, sans la béquille de Django demande/réponse de système de chaînage, vous devez initialiser la connexion de base de données, faire la requête, puis fermer la connexion. Ainsi l'exemple ci-dessus devient:
La connexion de base de données de gestion peut également être fait via Django signaux. Tous les ci-dessus est défini dans django/db/init.py. D'autres Orm ont aussi ce genre de gestion de la connexion, mais vous n'avez pas besoin de creuser dans leur source pour savoir comment le faire. SQL Alchimie de la connexion du système de gestion est documenté dans le tutoriels et ailleurs.
Enfin, vous devez garder à l'esprit que la base de données objet de connexion locale pour le thread courant en tout temps, ce qui peut ou peut ne pas vous limiter en fonction de vos besoins. Si votre application n'est pas apatride, comme Django, mais persistant, vous pouvez frapper problèmes de threading.
En conclusion, c'est une question d'opinion. À mon avis, à la fois les limitations de, et l'installation nécessaire pour, ORM de Django reinhardt, distinct du cadre est trop de responsabilité. Il y a parfaitement viable dédié ORM solutions disponibles ailleurs qui sont conçus pour l'utilisation de la bibliothèque. Django n'est pas.
Ne pense pas que tous les ci-dessus montre que je n'aime pas Django et de tous les rouages, j'aime vraiment Django beaucoup! Mais je suis réaliste sur les capacités et un ORM bibliothèque n'est pas l'un d'eux.
P. S. Multiples de connexion à la base de soutien est en cours de travaillé sur. Mais il n'est pas là maintenant.
Si vous aimez l'ORM de Django, c'est très simple à utiliser "autonome"; j'ai rédigé plusieurs techniques pour utiliser des parties de Django en dehors d'un contexte web, et vous êtes libre de les utiliser (ou rouler).
Shane ci-dessus semble être un peu mal informés sur ce sujet et sur quelques autres points, par exemple, Django peut faire de multiples bases de données différentes, il n'a tout simplement pas par défaut pour que (vous avez besoin de faire un custom manager sur les modèles qui utilisent autre chose que la "principale" de DB, quelque chose qui n'est pas trop dur et il y a des recettes flottant autour pour cela). C'est vrai que Django lui-même ne fait pas de la gestion de la connexion/le regroupement de connexion, mais personnellement j'ai toujours utilisé des outils externes pour que de toute façon (par exemple,
pgpool
, qui les roches plus difficile que tout ce qui est bâti dans un ORM pourrait jamais).Je te suggère de passer un certain temps à lire et peut-être essayer quelques recherches sur Google (par exemple, le post, je vous lié au sort comme le plus haut résultat pour "stand-alone Django script") pour avoir une idée de ce que sera fait le mieux en fonction de vos besoins et de vos goûts -- il peut être ORM de Django n'est pas bon pour vous, et vous ne devriez pas l'utiliser si elle n'est pas, mais malheureusement il y a beaucoup de désinformation là-bas qui brouille les eaux.
Édition de répondre à Shane:
Encore une fois, vous semblez mal informé: SQLAlchemy doit être configuré (c'est à dire, dit ce DB à utiliser, la façon de se connecter, etc.) avant de pouvoir exécuter des requêtes avec elle, alors, comment est le fait que Django besoins de configuration similaire (réalisés par l'intermédiaire de votre choix de méthodes -- vous ne pas besoin de disposer d'un Django fichier de paramètres) un désavantage?
Que pour ses multiples DB soutien, vous semblez confondre: le soutien est là, à un faible niveau. L'objet de requête -- pas
QuerySet
, mais le sous-jacentQuery
objet qu'il va exécuter sait ce qu'DB il est connecté à, et accepte une connexion DB comme l'un de ses arguments d'initialisation. Raconter un modèle à utiliser une DB et un autre modèle à utiliser un autre est aussi simple que la mise en place d'une méthode sur un manager qui passe à droite des infos de connexion vers le bas dans leQuery
. Vrai, il n'y a pas de plus haut niveau de l'API pour cela, mais ce n'est pas le même que l'indication "no support" et pas la même chose que l'exige le code personnalisé" (sauf si vous dirais que la configuration de plusieurs DBs explicitement dans SQLAlchemy, nécessaire si vous souhaitez que plusieurs DBs, est aussi un "code personnalisé").Pour que vous vous retrouvez indirectement en utilisant des choses qui ne sont pas dans
django.db
, eh bien, alors? Le fait quedjango.db
importations bits, disons, de ladjango.utils
parce qu'il y a des structures de données et autres bouts de code qui sont utiles pour plus que juste un ORM est bien comme je suis personnellement concerné; on pourrait tout aussi bien se plaindre si quelque chose a des dépendances externes ou du fait de l'utilisation de bibliothèques Python au lieu d'être 100% autonome.sqlalchemy
, diriez-vous que c'est à coup, ce n' "ORM, rien de plus"? Ou voulez-vous accepter que peut-être il pourrait y avoir des bibliothèques de l'importation dans le cadre de ses travaux, qui, en aucune façon porter atteinte à son "ORM" de la nature (aussi, SQLALchemy n'est pas "ORM, rien de plus")?(Je ne fais que le signaler ma solution parce que ma question a dit être un doublon)
Ah ok j'ai compris et afficherons les solutions pour n'importe qui qui essaye de faire la même chose.
Cette solution suppose que vous voulez créer de nouveaux modèles.
D'abord créer un nouveau dossier pour stocker vos fichiers. Nous allons l'appeler "autonome". Dans "autonome", créer les fichiers suivants:
Évidemment "myScript.py" peut être nommé que ce soit.
Ensuite, créez un répertoire pour vos modèles.
Nous allons nommer notre modèle répertoire "myApp", mais se rendent compte que cela est une application Django au sein d'un projet, en tant que tel, nom approprié pour la collection de modèles que vous écrivez.
Dans ce répertoire créer 2 fichiers:
Vous allez avoir besoin d'une copie de manage.py à partir d'un un projet Django, ou vous pouvez simplement prendre une copie de votre Django chemin d'installation:
Copie de la manage.py pour votre /autonome répertoire. Ok, donc vous devriez maintenant avoir la structure suivante:
Ajouter les éléments suivants à votre myScript.py fichier:
et les ajouter à votre settings.py fichier:
et enfin votre myApp/models.py:
et c'est tout. Maintenant pour avoir Django gérer votre base de données, dans l'invite de commande, accédez à notre programme /répertoire et exécutez:
Vous pouvez certainement utiliser les différentes parties de Django dans un mode autonome. Il est après tout qu'une collection de modules Python, que vous pouvez importer dans n'importe quel autre code que vous souhaitez utiliser.
Je recommande aussi de regarder SQL Alchimie si vous êtes seulement après l'ORM côté des choses.
Je suis à l'aide de l'ORM de django sans un fichier de paramètres. Voici comment:
Dans le stand-alone application lanceur de fichiers:
Maintenant vous avez juste besoin d'un
./modelsapp
dossier contenant un__init__.py
et unmodels.py
. La config utilise sqlite par souci de simplicité, mais il peut utiliser de la db backends.Structure de dossier:
Notez que vous n'avez pas à avoir un manage.py bon. Le
import execute_from_command_line
juste le trouve.Je recommande SQLAlchemy. Il doit faire tous les ORM choses, ainsi que la base SQL choses.
À l'aide de Django 2.0 ORM - Un Fichier Requis
Prendre un coup d'oeil à django-autonome ce qui rend cette installation assez facile.
J'ai aussi trouvé cette entrée de blog très utile.
Cet exemple est aussi simple que cela. J'ai déjà un django app appelé thab et en cours d'exécution. Je veux utiliser l'orm de django dans de standing libre de scripts python et d'utiliser les mêmes modèles que j'utilise pour la programmation web. Voici un exemple:
Probablement que je suis assez en retard de ma réponse, mais il vaut mieux tard que jamais.
Essayez ce simple paquet:
https://github.com/serglopatin/django-models-standalone
Comment utiliser:
télécharger
installer
créer un projet
ajuster les fichiers settings.py (BASES de données) et models.py puis migrer si les tables ne créé pas
utilisation djando modèles dans votre application (example.py)
prendre un coup d'oeil à cela, il travaille pour django version 1.8 gte.x
C'est ce qui a fonctionné pour moi dans Django > 1.4
En supposant que votre script autonome est votre projet django DIR.
Il suffit de copier ce dans un conf.py fichier (vous pouvez lui donner n'importe quel nom).
Ensuite importer le conf.py dans votre script python.
C'est la structure du projet:
Oui, vous pouvez.
Voici un endroit propre et court explication sur la façon d'utiliser Django modèles et d'abstraction de base de: https://stackoverflow.com/a/49515366/2682613
Django version: 2.0.2
Je comprends ce post est vieux, mais au cours des dernières années, j'ai trouvé une petite solution fonctionne très bien:
Veillant à ce que ce script s'exécute dans le répertoire relatif, ou d'appliquer le sys CHEMIN ajouter à assurer les modules sont résolus.
Espère que cela aide.
Vous pouvez l'utiliser en dehors d'un projet django.
Mais il y a des choses que vous devez être conscient de.
1. Plusieurs base de données du routeur.
Un routeur ressemble:
Vous pouvez utiliser la méta-classe dynamique créer routeur.
2. Django paramètres.
la clé le plus important est
TIME_ZONE
.DatetimeField
etDateField
est releated à elle.Un simple réglage doit être:
3.
close_old_connections
.Framework Django d'exécution par défaut close_old_connections dans chaque demande middleware pour éviter les "mysql a disparu".
PS: j'ai écrit un package pour l'utilisation de l'orm de django pas dans le style d'un projet django, https://github.com/jdxin0/django_db(https://github.com/jdxin0/django_db).
Mais vous devez toujours faire attention à la trois les problèmes ci-dessus.Mon colis le méta-classe pour résoudre multi db, ensemble
TIME_ZONE=None
et laisserclose_old_connections
à l'utilisateur.