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表中全部数据
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), )
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
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
Beginnen Sie mit der Implementierung von ORMEs gibt eine Idee in der Programmierung namens „Top-Down“. Wenn Sie also nicht wissen, wie man
ORMentwirft, 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()
字段类的实现
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) # 其它字段略,一个道理,一个模式
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!