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
1447 Leute haben es durchsucht

Im vorherigen Artikel haben wir mehr oder weniger das Wissen über Python vorgestellt, und im tatsächlichen Kampf müssen wir die Python-Entwicklungsseite verwenden >Framework-Entwicklungsseite ist die einfachste und einfachste. In diesem Kapitel stellen wir die Verwendung des Orm-Frameworks in der Python-Seitenentwicklung zum Entwickeln von Seiten vor.

Was ist ORM

ORM d. 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 ein ORM-Framework gibt.

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 &#39;<%s:%s>&#39; % (self.__class__.__name__,self.name)  
   class StringField(Field):
    def __init__(self,name=None,primary_key=False,default=None,ddl=&#39;varchar(100)&#39;): 
      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
Beliebte Tutorials
Mehr>
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!