Cansada de ser feliz

Bienvenidos a mi flujo de conciencia

Monitoreo de acciones de usuarios en Flask (SQLAlchemy)

| Comments

Suponemos que en nuestro proyecto de Flask hay un modelo Client definidao usando Flask-SQLAlchemy y queremos monetorear los cambios que se realizan sobre los objetos de ese modelo.

Para esto agregamos tres señales:

models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
from sqlalchemy import event

from main.signals import receive_before_update, receive_before_insert, receive_before_delete

class Client(db.Model):
    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    email = Column(String(255), unique=True)
    phone = Column(String(255))

event.listen(Client, 'before_insert', receive_before_insert)
event.listen(Client, 'before_update', receive_before_update)
event.listen(Client, 'before_delete', receive_before_delete)

EN el gódigo de cada señal llamamos los métodos inspect() y get_history() para detectar los cambios sobre el objeto:

1
2
3
state = db.inspect(client_object)
for attr in state.attrs:
     hist = state.get_history(attr.key, True)

Por ejemplo, para el atributo name:

1
2
3
4
{
    'added': ['Company A'],
    'deleted': ['Company B'],
}

El mégoto get_history() nos devuelve un objeto sqlalchemy.orm.attributes.History que tiene los siguientes atributos:

  • added - listado de valores agregados al atributo de nuestro objeto
  • deleted - listado de valores eliminados del atributo de nuestro objeto
  • unchanged - listado de valores del atributo de nuestro objeto que se quedaron intactos
  • has_changes() - método que retorna True si no habían ningunos cambios de valor de nuestro atributo.

Ahora, usando la variable current_user de la biblioteca Flask-Login, podemos guargar el usuario que realizó los cambios:

signals.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from flask_login import current_user

def save_changes(target, action):
    try:
        state = db.inspect(target)
        changes = {}
        for attr in state.attrs:
            hist = state.get_history(attr.key, True)
            if not hist.has_changes():
                continue
            added = format_changes_value(hist.added)
            deleted = format_changes_value(hist.deleted)
            if added != deleted:
                changes[attr.key] = {
                    'added': added,
                    'deleted': deleted,
                }
        if changes:
            mongo.db.user_logs.insert_one(dict(
                current_user_id=current_user.id,
                action=action,
                table_name=target.__tablename__,
                object_id=target.id,
                changes=changes,
                created_at=datetime.datetime.utcnow(),
            ))
    except Exception as e:
        pass

def receive_before_insert(mapper, connection, target):
    save_changes(target, 'create')


def receive_before_update(mapper, connection, target):
    save_changes(target, 'update')


def receive_before_delete(mapper, connection, target):
    save_changes(target, 'delete')

Las temporadas

| Comments

A veces me parece que aquí el tiempo no se mueve. A veces me digo: “El verano pasado…” – o – “El próximo invierno”, y luego me doy cuenta que no hay ningún verano, ni invierno, ni primavera, ni otoño. Y eso da el sentido que no cambia nada, pero cuando uno mira atrás, así llega uno a horrorizarse de cuánto tiempo ha pasado.

Pero antes todo era diferente…

Todo el verano sentía euforia de que por fin hacía calor y todo alrededor estaba verde. Podía mirar por horas cómo se movían las ramas de los árboles con el viento, aspirar el aire lleno de olores y escuchar los sonidos del bosque. Parecía que todo el mundo estaba feliz: los niños por fin tenían sus vacaciones, sacaban sus bicicletas y patines y salían a jugar afuera, las muchachas se desvestían tratando de exponer más de su cuerpo al sol. Constantemente había que acordarse de que eso se iba a acabar pronto, de que teníamos muy poco tiempo para disfrutarlo, entonces había que aprovechar cada momento, y por eso la gente se enloquecía.

En junio o julio a veces hace tanto calor que parece que el asfalto se funde. Realmente, todo se funde. Pero en agosto la llegan los vientos del norte trayendo las decepciones. La mente todavía no puede aceptar que el verano se acabó tan rápido, y la mente no manda al cuerpo que tiene que vestirse. Entonces llegamos al otoño con mocos y tos.

El otoño es un poco incómodo, porque uno no sabe cómo vestirse: de día es todavía bastante cálido, pero por la mañana hace mucho frío. Muchísimo. Entonces todos andan muy abrigados con muchas prendas quitándose sus sacos uno por uno. Después del verano caliente, cinco grados centígrados se siente como uno estuviera en el Polo norte. Pero ese es el precio que pagamos para ver esa abundancia de colores: las hojas de los árboles pierden el pigmento verde y el bosque se convierte en un lugar mágico. Siempre trataba de no levantar mucho las piernas cuando andaba para hacer crujir las hojas cecas de los árboles.

Luego, inesperadamente (como cada año), llega la nieve, y es inesperado porque los servicios de aseo nunca están preparados. De verdad, nadie está preparado. Creo que es porque todos tienen muy por dentro una pequeña esperanza de que puede ser éste año el invierno no llegue. Los árboles se vuelven completamente siniestros y se ven como muertos.

El diciembre el mundo se queda sumido en la oscuridad. Lo más doloroso era despertarse por la mañana para ir al colegio:

A las siete de la mañana suena el despertador, uno abre los ojos, pero todo está completamente oscuro, como a la medianoche. Los ojos se cierran lentamente y te vuelves a terminar de ver el último sueño. Pero luego llega el dolor – alguien prendió la luz. La luz entra a través de los párpados cerrados, y es insoportable. Uno trata de entreabrir los ojos, pero el brillo amarillo les ciega, entonces uno tiene que cerrarlos inmediatamente. Así con los ojos medio abiertos uno desayuna, se viste y sale de la casa a la oscuridad para patullar por la nieve. Claro que el barrendero también tuvo pereza y lo había limpiado las calles, entonces tocaba de nuevo abrir el camino hasta el colegio.

Las imágenes tomadas de https://ssl.panoramio.com/user/2301915.

“Rewire”

| Comments

Hace unos meses me di cuenta de que casi no leía noticias de Colombia, y era bastante difícil empezar a hacerlo, a pesar de que ya vivía aquí por un tiempo significativo. En Rusia, empezando desde el bachillerato, me demoré varios años leyendo toda la basura que publicaban en la prensa y en Internet para al fin formar mi lista de periódicos favoritos y periodistas que escribían textos interesantes y relativamente objetivos. Mientras que aquí en Colombia todo era desconocido: los artículos que encontraba al principio me parecían muy secos, llenos de descripciones de los hechos y casi sin análisis. No los disfrutaba ni siquiera desde el punto de vista literario y al final, después de torturarme con varios textos de la revista Semana, pasaba a mi mundo cómodo y organizado de mis fuentes de noticias rusas preseleccionadas.

Claro que me demoré tanto en empezar a leer las noticias locales en parte por la falta de perspectiva: sin conocer los nombres de los políticos y sus pareceres, sin conocer bien la historia y la mentalidad de la gente, es bastante difícil percibir la nueva información que proviene de ese contexto histórico y cultural.

Analizando esa situación, me puse a reflexionar acerca del cosmopolitismo general, y qué tantas noticias recibimos acerca de los otros países. Así, encontré el libro de Ethan Zuckerman, llamado “Rewire”: Cosmopolitas Digitales en la Era de la Conexión.

Ethan Zuckerman es director del MIT Center for Civic Media, blogger y activista de Internet. En su libro él escribe acerca de cómo las redes sociales y las nuevas tecnologías cambian nuestras vidas. Ahora, cuando tanta gente tiene acceso a Internet, parece que estamos rodeados de textos y noticias de todo el mundo, pero en realidad, todas esas herramientas nos ayudan a encontrar lo que buscamos y ya queremos saber, pero no la información que debemos conocer y que sería útil para nosotros.

En estos días, prestamos más la atención a las noticias de nuestro barrio, a lo qué ha pasado con nuestros amigos de Facebook, y no a lo que está pasando al otro lado del océano. Zuckerman escribe: “La vida de nuestros amigos nos interesa más que la vida de algunos desconocidos.” Y eso se refleja en las fuentes de información que usamos desde los periódicos hasta las redes sociales: ellos no nos ayudan a encontrar lo que necesitamos saber, sino lo que queremos saber. Zuckerman hizo un análisis de los periódicos de del pasado, comparando con los de hoy y se dió cuenta de que a pesar de que tenemos televisión satelital e Internet, que nos permiten transmitir la información desde cualquier parte del mundo, nos enfrentamos con una imagen del mundo más limitada que antes. Ahora el problema no está en la disponibilidad de la información, sino en la atención que estamos dispuestos a darla. Y ese problema se ve agravado por nuestro deseo natural de prestar más atención a lo que está pasando en el nuestro entorno y lo que tiene impacto directo sobre nosotros, nuestros amigos y familiares.

Zuckerman dice que debemos empezar a vernos no sólo como a los ciudadanos de un país en particular, sino también como los ciudadanos del mundo. Pero aunque uno de los mayores logros de Internet es la posibilidad de encontrar en la red las cosas más inesperadas, en la práctica lo que encontramos más a menudo, es algo que ya está cerca a nuestra casa. Al leer demasiados artículos de los autores que comparten nuestras opiniones, y al comunicarnos exclusivamente con las personas de ideas afines corremos el riesgo de radicalizarlos.

El proyecto de Ethan Zuckerman Global Voices: es.globalvoices.org
El libro Rewire: www.goodreads.com/book/show/16233761-rewire

Imagen: www.flickr.com/photos/brewbooks/

Somos de una sangre por Roman Super

| Comments

Somos de una sangre, tú y yo" - dijo Mowgli...

Rudyard Kipling El Libro De La Selva

La entrevista con Roman Super y la periodista Elena Vanina para la revista Afisha. Traducción a español:

Tu libro es no es sólo una historia acerca de cómo tú y tu esposa Yulia vencieron el cáncer. Es una historia de amor extraordinaria. Linda y asombrosa.

Simplemente, es que yo siempre tuve suerte con las niñas. Con mi mamá, que alguna vez también fue niña. Con mis profesoras en el colegio y en la universidad, quienes también fueron niñas e alguna época. Y con mi esposa, quien era niña, cuando nos conocimos.

¿Eso pasó hace mucho tiempo?

Sí. Yo estudiaba en el colegio y tenía ganas de ingresar a la universidad y asistía a los cursos para los postulantes, que daba una estudiante de la facultad de periodismo. Yulia era amiga de esa muchacha y un día por casualidad entró al salón donde estaba yo. Así nos conocimos. Después yo la quité a su novio, con quien iba a casarse. Después yo mismo me volví su novio, luego el esposo, y más tarde el papá de nuestro niño. Así fue.

Ustedes eran jóvenes, estaban felices y hacía poco habían tenido un hijo. Ustedes esperaban de la vida cualquier cosa, pero no eso. Y de repente les cae un diagnóstico horroroso - el cáncer. ¿Recuerdas cómo fue eso?

Me asusté mucho. Empecé a imaginar un funeral, un cementerio. Empecé a imaginar cómo iba a criar a nuestro hijo solo y trabajar al mismo tiempo. Por supuesto, en una situación como esa, lo primero que uno debe hacer es llamar a la persona que pueda decirle qué hacer. En mi caso esa persona era Katya Gordeeva (una autora la las películas documentales y del libro “Superar el cancer”), quien es una experta en la materia. Nosotros hablamos, y Katya me hizo aclarar mis pensamientos. Y eso ayudó. Tú estás nervioso, preocupado, temes a todo. Y todos tus temores te distraen de las cosas en las cuales tienes que concentrarte. Y tú tienes que entender, que toda tu vida posterior va a convertirse en un trabajo poco agradable, que va a sacar muchas fuerzas de ti. Tendrás que tranquilizarte constantemente.

El miedo. En Rusia, perece, que para todos es un sinónimo de cáncer. Una vez estaba caminando en Berlin y hacía mi corría un grupo de personas enfermas con unas camisetas de colores vivos con la frase “Vencemos el cáncer.” Ellos sonreían. Los vi y en ese momento de la forma automática miré al otro lado: no-no, por supuesto, no tengo miedo, simplemente al otro lado de la calle hay una cosa muy bonita. Se impone una sensación, de que esconderse es un reflejo universal.

Es un problema muy grande. Mi suegro es una persona muy enferma, y ante los ojos de él su hija se enfermó, estaba en el hospital y se curó, pero no sé qué tendría que pasar para que él vaya al hospital. No importa si es por alguna cosa pequeña o por algo grave. No sé cómo explicarlo de una forma racional. Y hay muchos ejemplos de ese estilo. Pero todo debería ser diferente: te asustaste, entonces corre al doctor. Probablemente, la gente que tiene recursos, debe difundir esa idea. Yo escribía mi libro y pensaba, que era posible que en el futuro se pueda tomarlo como un manual. Cuando viene una desgracia, tú no sabes qué hacer, a dónde ir, en qué pensar. Es muy fácil volverse loco. Yo quería escribir acerca de eso. ¿Mi libro o el libro de Katya Gordeeva son capaces de cambiar algo al nivel estructural? No lo creo. Pero si incluso mil de personas miran el problema de otra forma, será un éxito.

Cuando yo vi a mis conocidos, cuyas parejas tenían cáncer, a veces me parecía que la persona enferma se mantenía más firme comparando con sus familiares. ¿Es así en realidad?

Sí, es verdad. Lo primero que uno quiere hacer es desanimarse, estancarse y escapar del problema. Pero así llegaría el fin. Nada resultaría. Yo vi cómo Yulia estaba bajo los cuentagotas, que la quemaban desde adentro, la afectaban mucho físicamente. Durante esos seis sesiones de quimioterapia ella se quejó o dio rienda suelta a sus emociones sólo una vez y media o dos veces. Yo lo hacía con más frecuencia.

¿Tu hijo fue alguna vez al hospital donde estaba tu esposa?

Por supuesto que no. Yo vi unos niños por allá, pero me parece que no es lugar para ellos. Luka era demasiado pequeño para explicarle que es oncología. Él entendía, que la mamá estaba enferma, que en algún momento se volvió clava. Pero tratábamos de volverlo una broma: “ay, la mamá de volvió calva. La mamá se enfermó y luego se recuperó.”

¿Era difícil quedarte solo con el hijo?

El tratamiento de Yulia cayó en los meses de verano, entonces la gran parte del tiempo Luka estaba en la dacha con sus abuelos. En este aspecto tuvimos suerte. Por otro lado, yo ya tenía experiencia en estar con mi hijo sin la mamá. Un tiempo antes la mamá de Yulia también tuvo cáncer. Así somos de “suertudos”. Yulia era como la enfermera de su mamá, y yo estaba con Luka. Entonces me acostumbré. Lo más difícil era actuar frente el niño como si no hubiera pasado nada grave. Con la mitad de tu cerebro tienes que pensar en los helados, la plazoleta de juegos, diversiones y los dibujos animados. Y con la otra - que la mamá de este niño cayó en desgracia. No es fácil, pero es lo que pone las cosas en su lugar. Tú revaluaslas prioridades en tu vida. Después de que Yulia se enfermó, no hemos peleado. Ni una sola vez. Y Luka resultó la fuente principal de las fuerzas para nosotros. Nos dimos cuanta de que nos gustaría un día estar en la fiesta de su matrimonio juntos, que queremos ayudarle a escapar el servicio militar, que queremos mostrarle las películas que nos gustan y recomendarle libros…

¿Qué fue lo más difícil durante el tratamiento?

Lo más duro empezó un año después del tratamiento. La radioterapia es como un pequeño Chernobyl para una persona. Pasa un tiempo, y te empiezan a alcanzar los efectos secundarios, de los cuales no te habían advertido. Se daña la tiroides, dejas de poder controlar tu peso, no comes nada, pero igual te engordas, o de repente te despiertas por la noche con la taquicardia, que normalmente no le da a una persona. Y eso asusta mucho. Porque pensabas que ya te curaste, que empezó una vida nueva, que todo lo malo ha quedado atrás. Y de repente tienes esa tensión como el de un caballo. El tratamiento del cáncer también incluye un periodo de la rehabilitación, el cual en Rusia nadie se encarga. Te hemos curado el tumor y adiós. Que pena. Y cómo vas a seguir viviendo es tu problema.

Al mirar ese camino que ustedes han pasado juntos, ¿se puede decir que te enseño algo?

La cuestión principal, como me parece, que tienes que preguntarte en una situación así no es ¿por qué? Es ¿para qué? Porque para la pregunta ¿por qué? no hay respuesta. Y sobre la pregunta ¿para qué? vale la pena reflexionar. Acerca de eso escribí en mi libro. Después de la enfermedad trato de pasar cada segundo libre con mi familia, simplemente siempre queremos estar juntos. Antes no era así. Ésta visa es muy correcta. Ella da origen a muchos sensaciones agradables, de las cuales nos estamos privando. Puede ser que para eso.

El libro de Roman Super en Bookmate: https://bookmate.com/books/IRInDaCY

Cómo obtener el nombre del día de la semana en Python

| Comments

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> import calendar
> calendar.day_name[0]
'Monday'
> calendar.day_name[1]
'Tuesday'
> calendar.day_name[2]
'Wednesday'
> calendar.day_name[3]
'Thursday'
> calendar.day_name[4]
'Friday'
> calendar.day_name[5]
'Saturday'
> calendar.day_name[6]
'Sunday'

Si para nosotros la semana empieza el Domindo, podemos escribirlo de la siguiente forma:

1
2
3
4
5
6
7
> sunday = 0
> calendar.day_name[sunday - 1 % 7]
'Sunday'

> tuesday = 2
> calendar.day_name[tuesday - 1 % 7]
'Tuesday'

Espías rusos

| Comments

La pareja de los agentes de los servicios de inteligencia nacidos en Rusia – Andrey Bezrukov y Elena Vavilova – llegaron a Canada para cumplir su misión bajo los nombres de Donald Heathfield y Tracey Foley [1], y empezaron a construir su nueva vida. Posteriormente ellos tuvieron dos hijos: Tim y Alex Foley, a quienes recientemente les entrevistó el periodista de Guardian Shaun Walker [2]. Los muchachos le contaron acerca de su vida después de la revelación de sus padres y su trauma psíquico: no era fácil de aceptar a los 20 años de edad que toda la vida de ellos era una mentira…

En el año 2010 arrestaron a diez residentes de EEUU bajo la acusación de espionaje. Su actividad se reveló a causa de la traición de uno de los empleados del Servicio de Inteligencia Exterior de la Federación de Rusia [3]. A Bezrukov y Vavilova les arrestaron en su casa en Cambridge (en el estado de Massachusetts). Todo era como en una película: un grupo armado irrumpió violentamente en casa con el grito “¡FBI!”, agarraron a los espías y los llevaron dentro de unos carros negros. A los niños les dijeron que tenían un cuarto de hotel reservado para ellos, porque iban a efectuar un registro en la casa. Los policías llevaron absolutamente todo, incluyendo las fotos y la consola de videojuegos. Todas las cuentas bancarias de Donald y Tracey fueron bloqueadas, por eso los muchachos se quedaron sólo con el efectivo que tenían en sus bolsillos en ese momento [4].

Al principio, a los muchachos les parecía que todo eso era un error, y que los viajes frecuentes de negocios de su padre hicieron desconfiar a la policía. Pero resultó que no hubo ningún error y sus padres de verdad eran unos espías rusos.

Según Tim y Alex, ellos tenían una vida normal, incluso un poco aburrida…

Tracey Foley dio a luz a su primer hijo Tim en 1990. Después de un año del nacimiento de Alex la familia se mudó a Paris, donde un tiempo después Donald obtuvo su MBA. Al volver de Europa, él entró a la Escuela de Gobierno John F. Kennedy de la Universidad de Harvard, y empezó a trabajar en una consultaría. Tracey era un ama de casa, pero cuando los niños crecieron, ella empezó a trabajar como agente inmobiliario. Según Tim y Alex, ellos tenían una vida normal, incluso un poco aburrida: en Boston, a donde su familia se mudó en 1999, ellos iban al colegio, salían con sus papás a vacaciones y a veces recibían regalos de sus abuelos de Canadá. Los muchachos vieron a sus abuelos sólo una vez en su vida, pero cuando eran todavía muy pequeños. Probablemente por eso ellos no se dieron cuenta de que los abuelos no sabían hablar inglés. Las fotos con la nieve canadiense en el fondo, que les enviaron, fueron hechos en Siberia, de donde en realidad era su padre. En 2008 la familia recibió la ciudadanía estadounidense, pero Tim y Alex siempre se sentían como ciudadanos canadienses y estaban orgullosos de su patria.

En el verano 2010, cuando arrestaron a sus papás, a los muchachos les dieron pasaportes rusos y ellos tuvieron que irse a Moscú. Tim se convirtió en Timoféy y Alex – en Alexander Vavilov. Como decía Tim, se les dificultaba mucho pronunciar sus nuevos nombres.

Entrevista con Andrey Bezrukov publicada en la revista Experto [5]:

– Dicen que durante todo el tiempo de su servicio usted no dijo ni una palabra en ruso. ¿Es verdad?

– Sí, es verdad. Es la particularidad del trabajo ilegal. Tú no puedes hablar tu lengua materna incluso en la casa, todo está bajo un autodominio. Aunque después de unos años de trabajo eso se vuelve algo natural. Incluso tienes sueños en otros idiomas.

– ¿Su esposa también trabajaba con usted?

– Sí, mi esposa Elena es una espía profesional y estuvimos trabajando juntos hasta el último día.

– Dinero, el negocio, que hay que mantener – es toda una vida completa en el extranjero…

– Sí, por supuesto. En general , al verlo desde un punto de vista profesional, cuando una persona se encuentra en el exterior en una situación como la mía, se tiene que construir una nueva vida: resolver la situación económica y familiar. Prácticamente, esa persona empieza su vida desde ceros. Se puede decir, que te sientes como una persona diferente. Nosotros con mi esposa nos fuimos a la comisión de servicio sólo con una maleta. Tuvimos que graduarnos de nuevo de universidad, buscar trabajo, crear el negocio y no solo uno. Y todo sin ninguna ayuda y con los recursos mínimos – tú entiendas la situación en la que estaba nuestro país en esa época. Y a pesar de eso, teníamos que cumplir nuestra misión – realizar el trabajo que nos dieron.

La imagen tomada de nytimes.com

SQL to SQLAlchemy conversions

| Comments

Some examples on how to convert raw SQL to SQLAlchemy query:

SELECT

1
SELECT COUNT(*)
1
2
> from sqlalchemy import text, func
> db.session.query(func.count()).all()

Add labels

1
SELECT COUNT(*) as requiests
1
2
3
4
> rows = db.session.query(func.count().label('requests')).all()
> row = rows[0]
> row.requests
12

SUM function

1
SELECT SUM(status) as rides
1
2
3
4
> rows = db.session.query(func.sum(Book.status).label('books')).all()
> row = rows[0]
> row.books
12

COUNT and DISTINCT

1
SELECT COUNT(DISTINCT(author_id)) as authors
1
2
3
4
from sqlalchemy import distinct
> rows = db.session.query(
    func.count(distinct(Book.author_id)).label('authors')
).all()

Query a date range (BETWEEN)

1
2
3
4
> now = datetime.datetime.utcnow()
> db.session.query(Book).filter(
    Book.created_at.between(now - datetime.timedelta(hours=5), now)
).all()

Conditional SUM

1
SELECT SUM(((status IN (4, 7))::int)) as books ...
1
2
3
4
5
6
> from sqlalchemy.sql.expression import case
> db.session.query(
    func.sum(case([(Book.status.in_((4, 7)), 1)], else_=0)).label('books'),
).filter(
    # ...
).all()

IN clause

1
2
3
> Book.query.filter(
    Book.status.in_((BOOK_CONFIRMED, BOOK_FINISHED)),
).count()

For NOT IN just add ~ symbol:

1
2
3
> Book.query.filter(
    ~Book.status.in_((BOOK_CONFIRMED, BOOK_FINISHED)),
).count()

Labels and AS clause

In this example we’ll make a fingle table out of books and authors tables, labeling books.title and authors.last_name columns as name:

1
2
3
SELECT books.title AS name
FROM books UNION ALL SELECT authors.last_name AS name
FROM authors

And that’s how out SQL converts to SQLAlchemy:

1
2
3
4
5
db.session.query(
    label('name', Book.title)
).union_all(db.session.query(
    label('name', Author.last_name)
)).all()

Now we can also filter our result table by ǹame column:

1
2
3
4
5
db.session.query(
    label('name', Book.title)
).union_all(db.session.query(
    label('name', Author.last_name)
)).filter_by(name='some string')

LIKE and ILIKE

1
2
Book.query.filter(Book.title.like('%tale%')).all()
Book.query.filter(Book.title.ilike('%tale%')).all()

GROUP BY

Group books my month name:

1
2
3
4
SELECT to_char(created_at, 'Mon'), count(created_at)
FROM books
GROUP BY to_char(created_at, 'Mon')
ORDER BY to_char(created_at, 'Mon')
1
2
3
4
5
| Month    | Count |
|----------|-------|
| January  | 12    |
| March    | 29    |
| November | 8     |
1
2
3
4
5
6
books = db.session.query(
    func.to_char(Book.created_at, 'MM'),
    func.count(Book.created_at)
).group_by(
    func.to_char(Book.created_at, 'MM')
).order_by(func.to_char(Book.created_at, 'MM')).all()

Rap técnico ruso

| Comments

Banda: Rap tecnológico

Canción: Pero eres Programador

En una vida soy simplemente un peón: no soy ni fuerte, ni ancho de espalda,
Pero en la otra soy un superhéroe – Pero eres Programador.
Si a alguna chica se le cayó Windows,
Yo dejo todo y vuelo hacía allá.
¿Su esposo/esposa ya hace mucho que tiene un ataque de histería?
¡No hay problema! Yo fácilmente ajusto los canales en su televisor,
Reinstalo Xbox, la plancha de carbón y la lavadora.
No, hermano, no necesito dinero, no tengo problema.

Coro:
Pero eres Programador – es protector del planeta,
Repara todo desde la nevara hasta los esquís.
¿El procesador no se prende? ¿No hay internet?
Envía al espacio la señal Pero eres…
Pero eres Programador
Pero eres Programador
Pero eres Programador

Soy un superhéroe y tengo una supermano,
Con esa supermano jaqueo las cuentas de correo y las contraseñas de VK,
Borro enlaces de la red.
Sí, y además tengo superhabilidades de telepatía.
Apenas usted piensa – ¡qué demonios! – y dentro de un minuto me puede esperar.
Voy a repararlo con la garantía por un año,
Y si algo se daña – envía la señal Pero eres… y Pero eres… va a venir.

Coro.

¿Hacer una página? Con mucho gusto. Rápido, cualitativamente, y para usted siempre gratis.
¿Promocionar un blog? Con mucho gusto. Rápido, cualitativamente, y para usted siempre gratis.
¿Hacer un avatar? Con mucho gusto. Rápido, cualitativamente, y para usted siempre gratis.
¿Grabar un track? Con mucho gusto. Rápido, cualitativamente, y para usted siempre gratis.

Otras canciones: