Directorio de artículos
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:
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:
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:
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:
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:
Después de la modificación:
impresión:
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)
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
: ¿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.
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