Se utilizó Flask-sqlalchemy en el proyecto. Resumamos el uso aquí para evitar olvidar más tarde y tener que verificar la información en inglés.
1. La primera etapa del uso de sqlalchemy:
primero diga a sqlalchemy la estructura de la tabla a modo de clase, de la siguiente manera:
class AlarmStatistical(db.Model):
__bind_key__ = 'xnet_master'
__tablename__ = 'dashboard_alarm_statistical'
id = db.Column(db.Integer, primary_key=True)
source = db.Column(db.String(255), index=True)
pod = db.Column(db.String(255), index=True)
start_time = db.Column(db.DateTime, index=True)
count = db.Column(db.Integer)
def __init__(self, source, pod, start_time, count):
self.source = source
self.pod = pod
self.start_time = start_time
self.count = count
def alter(self):
self.count += 1
bind_key , NombreTabla es el matraz en una variable de entorno que representan los nombres de las tablas de ruta y bases de datos
Nota: primary_key puntos tienen que tener
y se puede escribir una función en esta clase, cuando se utiliza para llamar a estas funciones directamente con los datos en la base de datos
por lo ponemos la tabla completa, vistazo a algunas de las siguientes operaciones
2, seleccione la operación
usando el método básico sqlalchemy filtro de selección se lleva a cabo y filter_by
diferencia es, filter_by se puede utilizar en algunas expresiones complejas
f = AlarmStatistical.query.filter(AlarmStatistical.id == id).all()
.all () devuelve todos los datos calificados, hay otras maneras
.First () devuelve los primeros datos
.Limite (n) de retorno n de datos
, así como añadir sobre métodos de ordenación, el sitio web oficial para encontrar API específica
También se puede usar así:
data = AlarmStatistical.query.filter(AlarmStatistical.id == id)
data = data.filter(AlarmStatistical.pod == pod).all()
#可以模糊查询、或者其他条件查询
#模糊查询:
query.filter(User.email.endswith('@example.com')).all()
Si tiene múltiples condiciones inciertas, puede usar esto
p0=[AlarmStatistical.id==id,]
p1=[AlarmStatistical.pod == pod]
data = AlarmStatistical.query.filter(and_(p0),and_(p1))
#或者这样
p = [AlarmStatistical.id==id, AlarmStatistical.pod == pod]
data = AlarmStatistical.query.filter(and_(p))
3. Insertar datos
p = AlarmStatistical(......) #调用class中的__init__()函数
db.session.add(p)
db.session.commit()
4, el uso de la instrucción SQL nativa
gran cantidad de consultas complejas, inconveniente implementado objeto sqlalchemy, puede utilizar la instrucción SQL nativo directamente, sino que tienen que prestar atención a algunos ataques SQL, tales como ataques de inyección SQL
db.engine.execute(sql)
5. Eliminar datos
p = AlarmStatistical()
db.session.delete(p)
db.session.commit()
6, los datos de actualización
para actualizar los datos, primero debe cubrir consulta a los datos, a continuación, la actualización
u=AlarmStatistical.query.first()
u.id=123
#更新数据和变量赋值那么简单,但必须是通过查询返回的对象。
db.session.commit()
En este momento, puede usar los métodos de la clase, como:
u=AlarmStatistical.query.first()
u.alter()
db.session.commit()
7. Usar funciones en sql
#这个查询,会比较复杂,在现实使用中,完全可以使用原生的sql语句
data = (db.session.query(db.func.date_format(AlarmMessage.alarm_time, '%Y-%m-%d %H:%i').label('alarm_time'), AlarmMessage.alarm_source, AlarmMessage.pod,db.func.count('*').label('alarm_sum')).filter(AlarmMessage.alarm_time >= start_time, AlarmMessage.alarm_time <= end_time)
.group_by(AlarmMessage.alarm_source, AlarmMessage.pod) )
Use la función en sql: db.func.function-name () .label ('nombre'), la etiqueta se refiere al nombre después de la consulta y accede, después de usar la etiqueta, puede acceder a la
consulta data.name () aquí significa seleccionar El
filtro de datos representa la condición seleccionada.
Para sqlalchemy, solo relaciones simples de uno a uno, operaciones complejas de relación, y luego escribir y escribir.