Ein Artikel, der ausführlich erklärt, welche ORM-Frameworks bei der Entwicklung von Python-Websites verwendet werden

Tomorin
Freigeben: 2018-08-23 17:47:21
Original
1382 Leute haben es durchsucht

Im vorherigen Artikel haben wir mehr oder weniger das Wissen überPythonvorgestellt, und im tatsächlichen Kampf müssen wir diePython-Entwicklungsseiteverwenden >Framework-Entwicklungsseiteist die einfachste und einfachste. In diesem Kapitel stellen wir die Verwendung desOrm-Frameworksin derPython-Seitenentwicklungzum Entwickeln von Seiten vor.

Was ist ORM

ORMd. h. Object Relational Mapping, der vollständige Name lautet Objektrelationale Zuordnung.Aber was macht es?

Wenn Sie mit einigen Web-Backends in Berührung gekommen sind, wissen wir, dass ein großer Teil der Arbeit im Web-Backend aus dem Hinzufügen, Löschen, Ändern und Abfragen von Daten besteht. Wenn Sie eine Verbindung zur Datenbank herstellen müssen, erstellen Sie SQL Anweisungen und das Ausführen von SQL-Anweisungen bei jedem Betrieb der Datenbank sind zu mühsam, sodass wir eine Eins-zu-Eins-Zuordnungsbeziehung zwischen den Tabellen, Feldern und Zeilen in der Datenbank und den Klassen herstellen können Attribute und Objekte in unserer objektorientierten Programmierung, sodass wir den direkten Betrieb der Datenbank vermeiden können. Rufen Sie einfach die entsprechende Methode auf.

Nehmen Sie zum Beispiel meine frühere Praxis, um zu verstehen, wie ich es zuvor bei der Implementierung einer Benutzerregistrierung gemacht habe, indem die Rezeption die Daten abgerufen und an das Backend weitergeleitet hat, und dann wurden die Hintergrundzeichenfolgen gespleißt um eine SQL-Anweisung zu bilden, die im Hintergrund ausgeführt wurde.
Mit
ORM
muss ich nur ein Benutzerobjekt mit Daten instanziieren und dann die Speichermethode des Objekts aufrufen, um es in der Datenbank zu speichern. Als Benutzer muss ich es nicht bedienen eine SQL-Anweisungsanweisung.Angenommen, die Benutzerklasse entspricht der Benutzertabelle

user=User(id="100001",name="Andy",password="*****") user.save() //保存到数据库 user=User.findById("100001") #从数据库中找出id为"100001"的用户 user.update(password="*********") #更改id为"100001"的用户密码 users=User.findAll() #取出users表中全部数据
Nach dem Login kopieren

Ich fragte, wäre es nicht bequem, es so zu verwenden?

HinweisIO-Vorgänge sind alle asynchron und die verwendete asynchrone Bibliothek ist asyncio

Die verknüpfte Datenbank ist MySQL 5.7, verwendet Der asynchrone IO-Treiber für MySQL implementiert die notwendigen Vorbereitungen für ORM für aiomysql


---kapselt Datenbankoperationen

zum Erstellen Ein Datenbankverbindungspool

import asyncioimport aiomysql async def create_pool(**kw):global __pool __pool=await aiomysql.create_pool( host=kw.get('host','localhost'), port=kw.get('port',3306), user=kw['user'], password=kw['password'], db=kw['db'], charset=kw.get('charset','utf8'), autocommit=kw.get('autocommit',True), # 自动提交事务 maxsize=kw.get('maxsize',10), # 池中最多有10个链接对象 minsize=kw.get('minsize',1), )
Nach dem Login kopieren

kapselt die Auswahlmethode

async def select(sql,args,size=None): //size可以决定取几条 global __pool with (await __pool) as conn: cur=await conn.cursor(aiomysql.DictCursor) # 用参数替换而非字符串拼接可以防止sql注入 await cur.execute(sql.replace('?','%s'),args) if size: rs=await cur.fetchmany(size) else: rs=await cur.fetchall() await cur.close() return rs
Nach dem Login kopieren
Zusätzlich zur Auswahlmethode, die den Abfrageinhalt zurückgibt , der Rest des Updates, Sowohl Einfügen als auch Löschen müssen nur eine Reihe betroffener Zeilen zurückgeben, sodass die drei in einer Ausführungsmethode gekapselt werden können

def execute(sql,args): global __pool try: with (await __pool) as conn: cur=await conn.cursor() await cur.execute(sql.replace('?', '%s'), args) affected=cur.rowcount await cur.close() except BaseException as e: raise e return affected
Nach dem Login kopieren

Beginnen Sie mit der Implementierung von ORMEs gibt eine Idee in der Programmierung namens „Top-Down“. Wenn Sie also nicht wissen, wie man

ORM

entwirft, können Sie davon ausgehen, dass es bereits einORM-Frameworkgibt.

class Model(object): async def find(self): pass class User(Model): # 注意这里的都是类属性 __table__="users" id=StringField(...) name=StringField(...) user=User(id="10001",name="Andy") user.save()
Nach dem Login kopieren
Ist Ihnen aufgefallen, dass bei dieser Betrachtung der Benutzerklasse sehr deutlich zu erkennen ist, dass sie der Benutzertabelle entspricht, und auf einen Blick klar ist, welche Felder diese Tabelle enthält? Lassen Sie dann die Unterklasse die übergeordnete Klasse erben, um die Wiederverwendung von Suchen, Speichern ... und anderen Methoden zu realisieren. Es ist perfekt, aber wie erreicht man es?

字段类的实现

class Field(object): def __init__(self,name,column_type,primary_key,default): self.name=name # 字段名 self.column_type=column_type # 字段数据类型 self.primary_key=primary_key # 是否是主键 self.default=default # 有无默认值 def __str__(self): return '<%s:%s>' % (self.__class__.__name__,self.name) class StringField(Field): def __init__(self,name=None,primary_key=False,default=None,ddl='varchar(100)'): super(StringField,self).__init__(name,ddl,primary_key,default) # 其它字段略,一个道理,一个模式
Nach dem Login kopieren


Das obige ist der detaillierte Inhalt vonEin Artikel, der ausführlich erklärt, welche ORM-Frameworks bei der Entwicklung von Python-Websites verwendet werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!