ORM et peewee
1. Pourquoi utiliser ORM
- Isolez les différences entre la base de données et la version de la base de données
- Facile à maintenir
- ORM fournira l'injection anti-sql et d'autres fonctions
- L'appel de passage variable est plus facile
- ORM devient de plus en plus populaire
Deuxièmement, le choix de l'ORM
Cadre | avantage | Désavantage |
---|---|---|
Pee Wee | L'API de style Django le rend facile à utiliser et léger, et facile à intégrer à n'importe quel framework Web | Ne prend pas en charge la migration de schéma automatisée. Les requêtes plusieurs-à-plusieurs ne sont pas intuitives à écrire |
SQLObject | Utilise un mode ActiveRecord facile à comprendre; une base de code relativement petite | La dénomination des méthodes et des classes suit le petit style de cas de chameau de Java; l'unité de travail d'isolation de session de base de données n'est pas prise en charge |
Tempête | API rafraîchissante et légère, courbe d'apprentissage courte et maintenabilité à long terme; pas de constructeurs de classe spéciaux, pas de classes de base nécessaires | Forcer les programmeurs à écrire manuellement les instructions DDL créées par la table, au lieu de dériver automatiquement de la classe de modèle; les contributeurs Storm doivent donner à Canonical le droit d'auteur de leurs contributions |
ORM de Django | Facile à utiliser, courbe d'apprentissage courte; étroitement intégré à Django et utiliser des méthodes conventionnelles pour faire fonctionner la base de données lors de l'utilisation de Django | Il est difficile de gérer des requêtes complexes, obligeant les développeurs à revenir au SQL natif; étroitement intégré à Django, ce qui rend son utilisation difficile en dehors de l'environnement Django |
SQLAlchemy | L'API au niveau de l'entreprise rend le code robuste et adaptable; la conception flexible facilite l'écriture de requêtes complexes | Le concept d'unité de travail n'est pas courant; API lourde, conduisant à une longue courbe d'apprentissage |
Nous avons choisi peewee
ce framework pour apprendre car il est simple, flexible et la méthode de déclaration est proche de l'ORM de django. Et le nombre d'étoiles est élevé, l'activité est élevée et la qualité des documents est élevée.
Document officiel: http://docs.peewee-orm.com/en/latest/
Trois, utilisation peewee
1. Installation
Basculez vers l'environnement virtuel et installez
pip install peewee
2. Créer et utiliser
from peewee import *
db = MySQLDatabase("py_spider", host="localhost", port=3307, user="root", password="root")
class Person(Model):
name = CharField()
birthday = DateField()
class Meta:
database = db # This model uses the "people.db" database.
if __name__ == "__main__":
db.create_tables([Person]) # 根据模型创建数据表
La table de données générée, le nom de la table par défaut est le nom de la classe et un champ ID (clé primaire) est ajouté par défaut:
Table des types de champs (base de données et table de correspondance des champs de modèle)
Type de champ | Sqlite | Postgresql | MySQL |
---|---|---|---|
AutoField | entier | en série | entier |
BigAutoField | entier | grande série | bigint |
IntegerField | entier | entier | entier |
BigIntegerField | entier | bigint | bigint |
SmallIntegerField | entier | smallint | smallint |
IdentityField | non supporté | identité int | non supporté |
FloatField | réel | réel | réel |
DoubleField | réel | double precision | double precision |
DecimalField | décimal | numérique | numérique |
CharField | varchar | varchar | varchar |
FixedCharField | carboniser | carboniser | carboniser |
Champ de texte | texte | texte | texte |
BlobField | goutte | bytea | goutte |
BitField | entier | bigint | bigint |
BigBitField | goutte | bytea | goutte |
UUIDField | texte | uuid | varchar (40) |
BinaireUUIDField | goutte | bytea | varbinaire (16) |
DateTimeField | datetime | horodatage | datetime |
DateField | Date | Date | Date |
TimeField | temps | temps | temps |
TimestampField | entier | entier | entier |
IPField | entier | bigint | bigint |
BooleanField | entier | booléen | booléen |
BareField | non typé | non supporté | non supporté |
ForeignKeyField | entier | entier | entier |
3. Ajouter, supprimer, vérifier et modifier
(1) Ajouter
if __name__ == "__main__":
# db.create_tables([Person]) # 创建数据表
from datetime import date
# 生成数据
bob = Person(name="Bob", birthday=date(2020, 12, 12))
# 新增数据到数据库
bob.save()
(2) Requête de données
if __name__ == "__main__":
# 只查询一条数据 get方法在取不到数据会抛出异常,需try catch
Bob = Person.select().where(Person.name == 'Bob').get()
print(Bob.name) # Bob
print(Bob.birthday) # 2020-12-12
# 同上
Bob2 = Person.get(Person.name == 'Bob')
print(Bob2.name) # Bob
print(Bob2.birthday) # 2020-12-12
# 查询多条数据
Bobs = Person.select().where(Person.name == 'Bob')
for b in Bobs:
print(b.name)
print(b.birthday)
(3) Modifier les données
if __name__ == "__main__":
from datetime import date
# 修改数据
Bobs = Person.select().where(Person.name == 'Bob')
for b in Bobs:
b.birthday = date(1997, 10, 16)
b.save() # 在没有数据的时候新增,存在的时候修改
(4) Supprimer les données
if __name__ == "__main__":
# 删除数据
Bobs = Person.select().where(Person.name == 'Bob')
for b in Bobs:
b.delete_instance()