Python opera la base de datos MySQL a través de ORM


Manera ORM

El nombre completo de ORM es Mapeo relacional de objetos, es decir, mapeo relacional de objetos. Su idea de realización es mapear los datos de la tabla en la base de datos relacional en objetos y mostrarlos en forma de objetos, para que los desarrolladores puedan convertir las operaciones en la base de datos en operaciones en estos objetos. Por tanto, su propósito es facilitar a los desarrolladores la implementación del funcionamiento de la base de datos con pensamiento orientado a objetos.


ventaja: No es necesario utilizar sentencias sql complejas y es fácil de entender, no es necesario mantener una gran cantidad de sentencias sql, el sistema las convierte automáticamente en sentencias sql.

Desventaja: Método ORM, baja eficiencia, cuando necesita operar datos de manera eficiente, aún necesita usar declaraciones SQL

Uno, operación de Python MySql

1.1 Leer datos

Ejemplo de código:

from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy import Column,Integer,String,create_engine
from sqlalchemy.orm import sessionmaker

#生成基类 所有表构建的类都是基类之上的 继承这个基类
Base = declarative_base()

class Student(Base):
    __tablename__ ='student'#表名

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer,default=0)#默认0
    score = Column(Integer,default=60)#默认60

#创建引擎 相当于连接
engine = create_engine('mysql+pymysql://test:123456@localhost:3306/testdb')
DBSession = sessionmaker(engine)
session = DBSession()#必须实例化对象

#使用ORM方式对student表做一个查询
students = session.query(Student).limit(10)
for s in students:
    print(s.id,s.name,s.age,s.score)

session.close()#必须要关闭

Visualización de resultados:
Inserte la descripción de la imagen aquí

1.2 Insertar datos

El código es el siguiente (ejemplo):

#填入数据
#随机生成 两个字的姓名  年龄 分数 
for _ in range(10):
    s = Student(name=''.join(random.sample('张王天男别奥法妹大',2)),
                age=random.randint(16,22),score=random.randint(55,89))
    #add只是把对象加到session里面,最中执行是下面的commit()
    session.add(s)
#把添加的数据  整个让数据库执行,最终添加
session.commit()

Visualización de resultados:
Inserte la descripción de la imagen aquí

1.3 Consulta condicional

1.3.1 Consultar todo

El código es el siguiente (ejemplo):

#条件查询
#查找所有(all())名字是男奥的同学并打印出来
students = session.query(Student).filter(Student.name =='男奥').all()
for s in students:
    #print(s)  只是输出对象
    print(s.id,s.name,s.age,s.score)

Visualización de resultados:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

1.3.2 Consulta individual

El código es el siguiente (ejemplo):

'''
students = session.query(Student).filter(Student.name =='王天').limit(1)
'''

students = session.query(Student).filter(Student.name =='王天').limit(2)

Visualización de resultados:
Inserte la descripción de la imagen aquí

1.3.3 Condiciones de uso de limit (), all (), one ()

Cuando el nombre essolamenteCuando puede usar uno (), es decir, generalmenteClave primariaUtilice uno () 【La clave principal no se puede repetir
Use limit () cuando busque
datos individuales requeridos , use all () cuando busque datos en todos los datos

Comprenda y domine la diferencia entre limit () y one () :

Incluso si hay límite (1), debe usar el bucle for para generar datos de forma iterativa [La función limit () devuelve una lista] La función
one () devuelve el objeto [uno () es el único

1.4 Modificar datos

Ejemplo de código:

#修改数据
student = session.query(Student).filter(Student.name =='Tom').one()
print(student.age)
student += 2
session.add(student)
session.commit()
student = session.query(Student).filter(Student.name =='Tom').one()
print(student.age)

antes de arreglar:

Inserte la descripción de la imagen aquí
Después de la modificación:
Inserte la descripción de la imagen aquí
impresión:
Inserte la descripción de la imagen aquí


para resumir

问题 1 : NameError: el nombre 'aleatorio' no está definido

Solución : agregar importación aleatoria

Pregunta 2: No se pudo insertar el nombre chino de la base de datos (en la imagen)

Utilizo el editor de VS Code (este problema siempre ha existido después de usar VS, hasta que se resolvió después de combinarlo con la base de datos)
Inserte la descripción de la imagen aquí

Solución : Después de lanzar durante aproximadamente dos horas, (el tutorial en línea no sirve de nada para mi situación) finalmente adopté el método definitivo -----> Desinstalar la
base de datos recién instalada . Es mejor seguir el tutorial en línea para desinstalarlo usted mismo . Una
desinstalación no limpia hará que la instalación secundaria falle. Los resultados del tutorial de desinstalación de MySql
muestran:

El nombre chino es un complemento para la inserción exitosa de la nueva instalación después de la desinstalación
Inserte la descripción de la imagen aquí
: ¿Por qué MySql no puede insertar chino?

MOSTRAR VARIABLES COMO'character% '; // Usa este comando

En la figura siguiente: El éxito debe ser como se muestra en la figura siguiente.
Inserte la descripción de la imagen aquí
Fallo (antes de la desinstalación): Como se muestra en la figura siguiente

De hecho, siempre quelatin1cambie autf8Sí (es un cambio completo), pero el tutorial en línea probó muchas formas sin éxito, y finalmente tuvo que desinstalar y reinstalar
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/HG0724/article/details/112332393
Recomendado
Clasificación