Ganale a La Inflacion, primeros pasos Calculadora de Satoshis a Bolivares

Esta publicación la agregare a Steem quien sabe si saco por lo menos unos dolares allá con la serie de cálculos y gráficas que colocare aquí 😀

No pienso explicar que es un satoshi, segun wikipedia:

Es esa mínima expresión del bitcoin a la que se denomina satoshi, en honor a quien creara todo el sistema. Por lo tanto, cuando se habla de que te pagan 100 satoshis por ver una publicidad online, quiere decir que te pagan 0,00000100 bitcoin.

Y bueno como no te van a pagar en Bitcoin voy a hacer una calculadora sencilla con el valor del DolarToday y el Bitcoin Hoy, y a medida que vayamos avanzando iremos mejorandolo y agregándole proyecciones Gráficas y otras cosas..

 


# -*- coding: utf-8 -*-
# -*- encoding: utf-8 -*-

valor_bitcoin_en_dolares = 742
valor_dolar_bolivar = 2474
bolivar= 0

Bitcoin_en_satoshis = 100000000
cuantos_satoshis = int(input("Escribe la cantidad de Satoshis a calcular:") )

calculo_valor_BTC_en_bolivares = valor_bitcoin_en_dolares * valor_dolar_bolivar

print "Cuanto Vale un Bitcoin", calculo_valor_BTC_en_bolivares, "Bolivares Fuertes"
calculo_en_bolivares = (cuantos_satoshis * valor_bitcoin_en_dolares * valor_dolar_bolivar)*1.00000 / Bitcoin_en_satoshis

print "Cuanto es",cuantos_satoshis ,"Satoschis, Son", calculo_en_bolivares, "Bolivares Fuertes"

calculo_en_dolares = (cuantos_satoshis * valor_bitcoin_en_dolares)*1.00000 / Bitcoin_en_satoshis

print "Cuanto es",cuantos_satoshis ,"Satoschis, Son", calculo_en_dolares, "Dolares"

Bueno esta es la primera entrada y a medida que fui escribiendo me surgieron ideas, Dios les Bendiga hasta la próxima 😀

 

 

Anuncios

Derrotado a La Inflacion en Venezuela

Primero que nada siempre han habido tiempos malos en nuestra sociedad, quizá nunca hayamos tenido ningún tiempo como el presente pero eso es otra historia, en la biblia dice que aprovechemos el tiempo por que los días son malos… En conclusión Dios siempre esta al control de todo, y es por esto que debemos encomendar nuestros planes según su Buena Voluntad…

Bueno quizá estas pensando  que hacer con ese dinero que tienes de las utilidades o algún dinero extra que tengas y pensándolo bien con el Dolar subiendo mas y mas cada día si lo metes en el Banco es posible que lo absorba la inflación y por ejemplo 200BsF hoy mañana sean solo 190 y así cada día no estoy exagerando en 2 idas el dolar a pasado de 2100 a 2479 BsF según Dolar Today es terrible la situación que vivimos en Venezuela..

No me gusta suponer ni mucho menos decirte que hacer con tu dinero pero a mi me gusta arriesgar(confiando en que Dios ponga en mi corazón discernimiento, en realidad de arriesgar quizá tenga muy poco jejeje) y es por eso que voy a hablar de finanza en este Blog debido a la Gran Crisis de Venezuela, Recuerda que Dios tiene un plan para todos… y bueno imagina comprar 100 dolares hace 3 meses cuando el dolar valía cerca de 1200BsF habrías Gastado 120.000BsF y ahora mismo tendrías cerca de 240.000BsF en realidad no habrías ganado mucho ya que los precios de los productos van en aumento a medida que el dolar se va estabilizando… Dios lo puede todo, te invito a leer 2 Reyes 7 del 1 al 3, claro que nosotros debemos buscar la manera de no malgastar nuestro dinero y meterlo al banco es malgastarlo ahora mismo

Y bueno comprar dolares solo sirve para mantener tus activos pero que tal si te digo que podríamos agregar una variable mas aunque es ligeramente arriesgado, El Bitcoin, si el Bitcoin es una moneda Digital mas cara que el ORO por algo sera, mucha gente teme usar la moneda pero es una moneda mas peor son los billetes de Venezuela que tienen ídolos de la Santería y aun así debemos usarlos pero no adorarlos ojo…

Y bueno si hacemos la misma cuenta, pero ahora incluimos comprar Bitcoins con los dolares que teníamos hace 3 meses, hace 3 meses 1 Bitcoin costaba entre 500 y 600 dolares, es decir que por encima podriamos comprar 1/6 de Bitcoins o lo que es lo mismo 16.666.667 Satoshis y ahora mismo el Bitcoin cuesta 750 Dolares, es decir habríamos ganado con 1 Bitcoin 1/4 de lo invertido es decir 25 Dolares ahora si  te tome la atención 😀

Tu dirás el Hubiera es pasado ahora es que quiero invertir :S, hace poco empresas como BBVA, Movistar, Grupo Santander, hasta Google y Facebook segun rumores estan invirtiendo en esta tecnología y la buena noticia es que mientras vaya aumentando el comercio Digital el valor del Bitcoin sera mas alto, Claro si no Viene Nuestro Señor Jesucristo Antes, pero imagina que te pregunte que hiciste con el Dinero que te Dio? no lo donaste, no ofrendaste, ni nada, dejaste que se lo comiera la inflación…

Bueno yo espero que a finales del año que viene el Bitcoin se coloque en 1500 Dolares, y el Dolar Baje por lo menos en Venezuela a 1500BsF… y entonces Diras por que invertir en Dolares o Bitcoin entonces, simple no pienso en comprar y vender como hace la mayoría de la gente eso mas bien destruye el Pais, ya que las Divisas salen del País y no hay retorno… Lo que quiero hacer es invertir por ejemplo  en Minería en la nube para comenzar con planes de 1 año y asi como esta el retorno seria en 5 a 7 meses y lo demas es ganancia es decir ganarías si inviertes 100 Dolares como mínimo 70 dolares mas lo que pueda subir el Bitcoin… en la proxima entrada espero tener mi Cloud ya funcionando para mostrarle como invertir en las mejores y ams fiables Cloud como mover su dinero de Bitcoins a Dolares o Bolivares y un par de calculadoras de suposiciones que pienso hacer para ver la trazabilidad de LA INVERSION, dicen que lleva riesgos epro en el peor de los casos en 4 meses tendras casi toda tu inversion…

Hace 1 año exactamente le dije a un tío que dice el tiene mucho Dinero, pero para mi es realmente Pobre por que no sabe de números y lo mas importante no tiene a Dios en su Corazón, le dije que invirtiera 360$ en 1 Bitcoin con lo que podía comprar un AntMiner S5 y de 5 a 7 meses tendría el retorno y luego ganaría Dividendos hasta que el Antminer muera es decir de 3 a 5 años como mínimo, y estaba un poco dispuesto y todo el mundo no hubo uno solo le dijo que si estaba loco, bueno con el dolar a 700BsF mas o menos y el Bitcoin a 360$ imagínate cuanto no tendría ahora mismo de Retorno… Bueno cosas asi me han pasado por no tener Dinero jeje, pero ahora mismo Dios esta Bendiciendo mi vida y quiero invertir no para mi si no para ayudar a tanta gente que no tiene la visión que Dios me ha dado, no económicamente si no mas bien usar el dinero para cursos seminarios Teológicos y de Tecnología, para las misiones y otras cosas… Bueno es lo que quiero esperemos que Dios me lo permita según su Buena y perfecta Voluntad…

Saludos Dios les Bendiga

 

 

El juego “Generala” en Python

No me gusta hacerle la tarea a la gente… pero estoy suscrito a Google Alert y me llegan las cosas de Python y hoy me puse a revisar y vi este interesante programa que le mandaron a hacer a un flojo… de verdad que yo pienso que soy flojo para lo que no me gusta hacer… pero si usted estudia programación y tiene pereza de hacer un programa tan simple de verdad déjeme decirle que se equivoco de carrera…

Hoy por ejemplo tuve que implementar 2 módulos en ODOO y extraer datos de unos archivos KIU y de verdad no me seria nada agradable si no me gustara la programación… ademas de instalar un FTP seguro :D… es dura la vida del programador y te tiene que gustar pasar horas intentando solucionar tus problemas de código o el de otros programadores… Si te gusta aprender e investigar y ademas intentas correr tus programas bienvenido al Club… no hay nada malo en equivocarse yo por ejemplo estudie Ing. Química y ahora soy programador, me gusta lo que hago y pagan bien 😀

Manos a la obra, el enunciado dice así:

El juego “Generala” consiste en tirar cinco dados y establecer el puntaje de la jugada. De las posibles, la escalera se da cuando suceden algunas de las tres progresiones: 1-2-3-4-5, 2-3-4-5-6 y 3-4-5-6-1. Realice un programa que tire los 5 dados al azar y determine si se produjo una escalera.

Es un poco sencillo si conoces las estructuras de python, quizá se pueda hacer mejor que lo que hice pero esto lo hice en 10 minutos aproximadamente junto con el otro código 😀

Primer código resolviendo la tarea :S

# -*- coding: utf-8 -*-
import random
###   El juego "Generala" consiste en tirar cinco dados y establecer el puntaje de la
###   jugada. De las posibles, la escalera se da cuando suceden algunas de las tres progresiones: 1-2-3-4-
###   5, 2-3-4-5-6 y 3-4-5-6-1. Realice un programa que tire los 5 dados al azar y determine si se produjo
###   una escalera. 



Iteraciones = 0 
Ganaste = 0
while Ganaste != 1000:
    Lista_dados=[]
    dado_1= random.randrange(1,7)
    Lista_dados.append(dado_1)
  
    dado_2= random.randrange(1,7)
    Lista_dados.append(dado_2)
  
    dado_3= random.randrange(1,7)
    Lista_dados.append(dado_3)
  
    dado_4= random.randrange(1,7)
    Lista_dados.append(dado_4)
  
    dado_5= random.randrange(1,7)
    Lista_dados.append(dado_5)
    
    Lista_dados.sort()
    
    
    if ( Lista_dados == [1, 2, 3, 4, 5] ) or ( Lista_dados == [ 2, 3, 4, 5,6] ) or ( Lista_dados == [1, 3, 4, 5, 6] ):
          Iteraciones +=1
          print "Ganaste en: ", Iteraciones, "Lanzadas"
          print Lista_dados

          Ganaste += 1000
          
          
    else:
          Iteraciones +=1
          print "Sigue intentando solo son: ", Iteraciones, "Lanzadas"

      

Prueba el código y veras la salida, explico este brevemente el otro no :S

Importamos Random para agregar azar al código :D, creamos un bucle while que se ejecutara hasta que Ganaste sea diferente  a 1 o haya 1 ganador, lanzamos los dados desde 1 a 6, recuerda que range no toma el ultimo numero, al final de los dados los sorteamos por defecto de menor a mayor, y creamos 1 if, si los dados aparecen como en alguna de las listas ganadoras, agregamos a ganaste y se rompe el bucle, ademas agregamos 1 a iteraciones y escribimos ganaste en X iteraciones e imprimimos la lista ganadora, esto se hace hasta que Ganaste sea 1 o haya 1 ganador si no se agrega 1 a iteraciones, se muestra un mensaje de consolación y se reanuda el Bucle.. fácil verdad

Ahora como soy ocioso y me gusta pensar y tratar de plasmar mis ideas en código, quería saber cual es la mas alta probabilidad de ganar es decir si lanzo los dados x veces cuantas veces ganare en X lanzadas, pero como mi pensamiento estaba algo no explicito cree una lista con las 10 iteraciones mas comunes en ganar este es el resultado:

# -*- coding: utf-8 -*-
from collections import Counter, OrderedDict
from prettytable import PrettyTable

import random
###   El juego "Generala" consiste en tirar cinco dados y establecer el puntaje de la
###   jugada. De las posibles, la escalera se da cuando suceden algunas de las tres progresiones: 1-2-3-4-
###   5, 2-3-4-5-6 y 3-4-5-6-1. Realice un programa que tire los 5 dados al azar y determine si se produjo
###   una escalera. 


Lista_ganadas=[]
iteraciones_total = 5000
for lanzada in range(1,iteraciones_total):
  Ganaste = 0
  Iteraciones = 0
  while Ganaste != 1:
    Lista_dados=[]
    dado_1= random.randrange(1,7)
    Lista_dados.append(dado_1)
  
    dado_2= random.randrange(1,7)
    Lista_dados.append(dado_2)
  
    dado_3= random.randrange(1,7)
    Lista_dados.append(dado_3)
  
    dado_4= random.randrange(1,7)
    Lista_dados.append(dado_4)
  
    dado_5= random.randrange(1,7)
    Lista_dados.append(dado_5)
    
    Lista_dados.sort()
    
    
    if ( Lista_dados == [1, 2, 3, 4, 5] ) or ( Lista_dados == [ 2, 3, 4, 5,6] ) or ( Lista_dados == [1, 3, 4, 5, 6] ):
          print "Ganaste en: ", lanzada, "Lanzadas"
          print Lista_dados
          Ganaste += 1
          Iteraciones += 1
          Lista_ganadas.append(Iteraciones)

          
    else:
          print "Sigue intentando solo son: ", lanzada, "Lanzadas"
          Iteraciones += 1
    
      
c = Counter(Lista_ganadas)
mas_comunes=  c.most_common()[:10]  

print "mas_comunes",mas_comunes
primer = mas_comunes[0][1]

numero_de_repeticiones = len(mas_comunes)

porcentajes = []
iteracion_ganada = []
for repeticion in range(0,numero_de_repeticiones):
    x = mas_comunes[repeticion][1]
    porentaje_de_iteraciones_total = float(x * 100.0000/ iteraciones_total)
    porcentajes.append(porentaje_de_iteraciones_total)
    iteracion_win = mas_comunes[repeticion][0]
    iteracion_ganada.append(iteracion_win)

    


table = PrettyTable(["iteracion_ganada", "porcentaje"])
i = 0
for repeticion in iteracion_ganada:
    
    table.add_row([iteracion_ganada[i], porcentajes[i]] )
    i += 1

print table


El resultado es algo como esto 😀

+------------------+-------------+
| iteracion_ganada | porcentajes |
+------------------+-------------+
|        1         |     4.88    |
|        2         |     4.54    |
|        4         |     4.1     |
|        3         |     3.98    |
|        7         |     3.74    |
|        5         |     3.72    |
|        9         |     3.56    |
|        6         |     3.26    |
|        11        |     2.96    |
|        10        |     2.88    |
+------------------+-------------+

Dios les Bendiga y recuerden si nos gusta lo que trabajamos no podemos llamarle trabajo 😀

VSFTP en Debian/Ubuntu o Centos ERROR 500 OOPS: vsftpd

500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed.

Estaba instalando el Servidor VSFTP y me encontré con este error que rápidamente solucione buscando en la web con estos comandos:


chmod a-w /home/ruta_del_home_del_usuario_FTP

Recuerda cambiar ruta_del_home_del_usuario_FTP por el home que le asignaste en la configuración…

Si no agregaste la linea allow_writeable_chroot=YES debes hacerlo asi


echo 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf

Ahora Reiniciamos el Servidor



systemctl restart vsftpd

 

Hay otro error y es este:  vsftpd 553 Could not create file.

vsftpd 553 Could not create file.

Pero este error es mas sencillo simplemente con chown darle permisos a la carpeta :S, no por que no lo hace automático, sera por que es Centos :S

chown usuario_ftp /home/usuario_ftp

 

Recuerda cambiar usuario_ftp por tu usuario en las 2 partes, esto es todo que Dios les Bendiga… Comentar es gratis 😀

Información sacada de:

www.liquidweb.com

aula128.wordpress.com

También te puede interesar este post:

rootear.com

Python Scraping NFL [Parte 1]

Al final decidí hacer la parte 1 de esta interesante serie, estamos bastante desfasados :S, pero esta semana creo que podre terminar esta serie hasta la parte del scraping… ya la parte del análisis espero tenerla este año, y sera para la próxima temporada que podremos usarla a tope… Hoy vamos a ver el codigo de como extraer los datos para cada juego, solo vamos a extraer los score de cada equipo por separado, ya luego podemos hacer un for para que nos los agrupe de 2 en 2 y asi saber a quien se enfrento cada equipo….

Aqui el codigo, aunque pienso cambiarlo un poco en como aplicar el get.TEXT, luego algun comentario del codigo:

import requests, urllib2
from bs4 import BeautifulSoup
import re

import math

lista_regular_season = [range(1, 6)]

### Pagina primaria para buscar los datos

url_1er = 'http://www.nfl.com/scores/2016/REG'
for semana in lista_regular_season[0]:
  
    print "      " 
    print "      " 

    print "      " 
    print "Que semana esta: ", semana 
    print "      " 
    print "      " 
    print "      " 

    url_1er = 'http://www.nfl.com/scores/2016/REG'+str(semana)
    
    print url_1er

    url_1er = 'http://www.nfl.com/scores/2016/REG'

            
    page_1era = urllib2.urlopen(url_1er)
            
    soup_1er = BeautifulSoup(page_1era, 'lxml')

    divicion_Diviciones = soup_1er.find_all('div',class_="new-score-box-wrapper" )
    
    quarters_total = soup_1er.find_all('p',class_="total-score" )
    if "--" in quarters_total:
      print "Este juego No se ha jugado"
      pass
    else:
      
      
        results_total = []
        results_first = []
        results_second = []
        results_third = []
        results_fourth = []
        nombres_equipos = []

        ### Total
        quarters_total = soup_1er.find_all('p',class_="total-score" )
        results_total.append([headers.get_text() for headers in quarters_total])
        results_total = results_total[0]


        ### nombre Equipo
        nombre_equipo= soup_1er.find_all('p',class_="team-name" )
        nombres_equipos.append([headers.get_text() for headers in nombre_equipo])
        nombres_equipos = nombres_equipos[0][2:]
        
        ### Primer cuarto
        first_qt = soup_1er.find_all('span',class_="first-qt" )
        results_first.append([data.get_text() for data in first_qt])
        results_first = results_first[0][2:]

        ### segundo cuarto

        second_qt = soup_1er.find_all('span',class_="second-qt" )
        results_second.append([data.get_text() for data in second_qt])
        results_second = results_second[0][2:]

        ### tercer cuarto

        third_qt = soup_1er.find_all('span',class_="third-qt" )
        results_third.append([data.get_text() for data in third_qt])
        results_third = results_third[0][2:]

        ### cuarto cuarto

        fourth_qt = soup_1er.find_all('span',class_="fourth-qt" )
        results_fourth.append([data.get_text() for data in fourth_qt])
        
        ## Debo cambiar la linea anterior para obtener 1 sola lista 😀
        results_fourth = results_fourth[0][2:]





        i = 0
        for datos in nombres_equipos:
                print "Nombre Equipo", datos
                primer_cuarto =  results_first[i]
                primer_cuarto =  int(primer_cuarto)
        

                segundo_cuarto = results_second[i]
                segundo_cuarto =  int(segundo_cuarto)

        
                tercer_cuarto =  results_third[i]
                tercer_cuarto =  int(tercer_cuarto)

        
                cuarto_cuarto =  results_fourth[i]
                cuarto_cuarto =  int(cuarto_cuarto)
                print "1er Cuarto:  ", primer_cuarto,"2do Cuarto:  " ,segundo_cuarto,"3er Cuarto:  ", tercer_cuarto,"4to Cuarto:  ", cuarto_cuarto
        

                total_total = primer_cuarto + segundo_cuarto +tercer_cuarto + cuarto_cuarto
                total = results_total[i]
                
                print "Total", total_total
        
        
        

                i += 1

No hay mucho que comentar solo que la pagina usada para extraer los datos es http://www.nfl.com/scores/2016/REG y se le agrega un numero que corresponde a la semana o jornada de la temporada…

También la linea data.get_text() debo modificarla para hacer el código mas viable 😀

Las otras partes son faciles de entender si has seguido mis entradas 😀

Hasta luego Feliz Dia y que Dios te Bendiga

Planificación de Tareas desde Openerp v7 (ODOO) ir_cron

Me disculpan que no he subido el vídeo de PNRs Sabre con ODOO, pero es que he estado bastante ocupado con el Trabajo que estoy haciendo para la AeroLinea esta(aunque no directamente, soy freelancer)…

Hoy les vengo a contar que después que cree, el modulo que lee los PNRs que imprime el software SABRE, para la segunda Fase tengo que hacer que todo sea automático, es decir que con el modulo ir_cron de ODOO se ejecute la lectura de los PNRs y se vacié en las clases correspondientes, lo segundo ya estaba hecho lo primero no, me pareció muy sencillo pero tiene su truco, como todo en ODOO 😀

Al principio pensé que correría directamente en el planificador colocando los datos del objeto y el método a llamar, pero me equivoque y me daba este error(ojo corte el error pero básicamente eso dice):

openerp.addons.base.ir.ir_cron: Call of  create TypeError: create() takes at least 4 arguments (3 given)

Y ahora que hago el Botón si esta funcionando pero el planificador no quería leer mi código :S… Buscando en internet y leyendo ayudas con respecto a este tema me encontré con varias y son de las que vamos a hablar aquí, creo que si llegaste aquí es por que tienes algún error de los que vamos a hablar… por eso no colocare el código completo 😀

  • El error me dice estas pasando 4 argumentos mientras que la llamada a create del planificador necesita 3.
def run_actions(self, cr, uid, ids, context=None):

Así mas o menos tenemos nuestra función definida, les cuento que no hay nada de malo para un botón, pero si lo que queremos es pasársela al planificador solo debemos eliminar “ids” de los argumentos que estamos pasando y ya funcionara 😀

def run_actions(self, cr, uid, context=None):

Por otra parte si quieres saber exactamente como hacer una función para ser llamada por el planificador aquí te dejo este enlace

Ademas si quieras ir un poco mas allá no dejes de leer esto

En un rato o mañana voy a subir un código en python que esta muy interesante, que tuve que hacer para simular la llegada de archivos PNRs a el servidor que las procesa, para cambiarlas de Directorio(carpetas) donde llegan a un directorio de Procesados, no es mucho pero es interesante las formas que tenemos de embeber código Shelscript en Python

Voy a ir subiendo los vídeos a ver si algún día suben :S

 

 

Scraping con Python la Liga BBVA de ESPN [Parte 4]

Bueno esta semana estuve un poco de aquí para alla, por lo que no había tenido tiempo de postear el Código para extraer los datos de ESPN de las tablas De posiciones así como las estadísticas de cada equipo, les cuento que se nos viene la NFL y la LVBP(Liga Venezolana de Béisbol Profesional), por lo que me voy a ver obligado a dar otro rumbo a las tablas de jugadores en ESPN y los voy a cambiar a NFL y LVBP, ojo si vamos a crear la tabla de jugadores para cada semana, pero no vamos a hacer mucho esfuerzo, por lo que les prometo una entrada mas de esta Serie donde tendremos los jugadores y sus estadísticas en las diferentes ligas de fútbol, y mas adelante seguiremos aprendiendo con python y ESPN pero en otros deportes…

También les quería comentar que como actualmente tengo bastante trabajo en ODOO v9 voy a tener redireccionar un poco y nos vamos a olvidar un rato de SQLITE3 y los siguientes scraping que voy a hacer van a ser para ODOO… sin mas nada que decir por ahora, manos a la obra….

Aquí tenemos el código que he venido preparando el cual voy a comentar brevemente dentro del mismo y luego voy a ir comentando las salidas, no voy ahondar mucho por que es muy largo mas de 200 lineas funcionales que bien se pueden rebajar a 110 mas o menos pero prefiero dejarlo así :D, este es el código:

### Autor Cesar Chirinos 
### Autor WordPress Orfeo
### Licencia GPL
### Publicado en stickybitshell.Wordpress

import sqlite3

import urllib2, re
from bs4 import BeautifulSoup
import re
from prettytable import PrettyTable

### Creamos la base de datos Ligas_varias_futbol

conn = sqlite3.connect('Final_Ligas_varias_futbol.sqlite3')

cur = conn.cursor()

### Agregue esto por que la pagina no me dice en que jornada o semana estamos
### Lo bueno de los otros deportes es que tienen mucha mas informacion de los jugadores
### y al hacerlo por partido vamos agregando los datos si existen a diferentes tablas 😀
liga_fecha_1 = int(input("Escriba El numero de la fecha a ingresar: "))

### Podemos comentar estas lineas cuando ya la tengamos en produccion
#cur.execute('''DROP TABLE IF EXISTS Ligas''')
#cur.execute('''DROP TABLE IF EXISTS Equipos_Ligas''')
#cur.execute('''DROP TABLE IF EXISTS Posiciones_por_Fechas''')

## Tabla para las ligas
cur.execute('''CREATE TABLE IF NOT EXISTS Ligas (id_liga INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, nombre_liga TEXT UNIQUE,  pais_liga TEXT UNIQUE)''')

### Tabla para todos los equipos involucrados
cur.execute('''CREATE TABLE IF NOT EXISTS Equipos_Ligas (id_equipo INTEGER PRIMARY KEY, nombre_equipo TEXT UNIQUE,  id_equipo_ESPN INTEGER UNIQUE, id_liga INTEGER)''')


### Creamos la tabla para guardar losd atos de cada jornada o semana 
cur.execute('''
 CREATE TABLE IF NOT EXISTS Posiciones_por_Fechas (id_posiciones INTEGER PRIMARY KEY, id_equipo INTEGER NOT NULL,id_liga INTEGER NOT NULL , posicion INTEGER NOT NULL,
                                                    part_jugado  INTEGER NOT NULL, p_gan INTEGER NOT NULL ,p_emp INTEGER NOT NULL, p_per INTEGER NOT NULL, 
                                                    gol_favor INTEGER NOT NULL, gol_contra INTEGER NOT NULL, Dif_Gol INTEGER NOT NULL,
                                                    p_gan_casa INTEGER NOT NULL, p_emp_casa INTEGER NOT NULL, p_per_casa INTEGER NOT NULL, gol_favor_casa INTEGER NOT NULL ,
                                                    gol_contra_casa INTEGER NOT NULL, p_gan_vis INTEGER NOT NULL, p_emp_vis INTEGER NOT NULL, p_per_vis INTEGER NOT NULL,
                                                    gol_contra_vis  INTEGER NOT NULL, gol_favor_vis INTEGER NOT NULL, Puntos_tot INTEGER NOT NULL ,
                                                    liga_fecha INTEGER NOT NULL UNIQUE)''')
### HAY q arreglar la tabla asi como se colocan los datos, se imprimen 😀

        ### podemos agragar otras ligas
urls_ligas = [ "spanish-primera-division/15/table" , "english-premier-league/23/table" ,  "italian-serie-a/12/table", "german-bundesliga/10/table" ]

tabla_formateada =[]
contador = 0
liga_para_id = 1

### creamos un bucle for para recorrer las ligas que queremos
for liga in urls_ligas:
  url =  "http://www.espnfc.us/" +  liga 
  
  ### Sacamos los nombres haciendo uso de expresiones regulares
  sacar_nombre =  re.findall('^(\S+?)/', liga)
  nombre_liga = sacar_nombre[0]
  ### Sacamos el pais haciendo uso de expresiones regulares
  sacar_pais =  re.findall('^(\S+?)-', liga)
  pais_liga = sacar_pais[0]
    
    
  ### Ahora agregamos los datos extraidos a la tabla Ligas
  cur.execute('''INSERT OR IGNORE INTO Ligas (nombre_liga, pais_liga) VALUES ( ?,? )''',(nombre_liga,pais_liga )) # Agregamos los datos a las ligas que queremos estudiar
    
    
  ### Antes habiamos hecho uso de expresiones regulares, ahora vamos a usar beautiful soup para dar un mejor formato que nos permita hacer scrap sobre la pagina
  page = urllib2.urlopen(url)
  
  
  ### Formateamos las pagina a lxml con beautifulsoup
  soup = BeautifulSoup(page, "lxml")

  ### Buscamosla primera table y las agregamos a table
  table = soup.find('table')
  
  ### buscamos todas las tr o table row, y las agregamso a row
  rows = table.find_all('tr')

  results = []
  

  Equipos = []
  ids_ESPN = []
  
  ### Creamos un bucle para buscar en cada row
  for row in rows:
        ### los 2 condiciones se van a ejecutar para buscar las headers y luego las rows
        table_headers = row.find_all('th')
        if table_headers:
            results.append([headers.get_text() for headers in table_headers])
           
        table_data = row.find_all('td')
        if table_data:
	    results.append([data.get_text() for data in table_data])
            a_ver = [data for data in table_data]
            


  ### Ahora eliminamos los 2 primeros elementos de la lista, en realidad eliminamos las  2  primeras listas que  hay en results con el este bucle y el if
  i = 0
  for datos  in results:
  
    if i >= 2:
        ### Ahora vamos a eliminar el ruido o las columnas que no nos dicen nada
        while ( u'\xa0'  or u'\n' or u'' )  in datos:
            if (u'')  in datos :
                datos.remove(u'')
            elif  u'\n'  in datos:
	       datos.remove(u'\n')
	    elif  u'\xa0'  in datos:
	       datos.remove(u'\xa0')
	       
        
        
        ### Agregamos la salida a una nueva lista
        tabla_formateada.append(datos)

    i += 1        

  
  
  ### Ahora llega la parte divertida
  ### Buscamos los nombres de los equipos y sus ids, esto para crear la relacion entre la tabla 2 y 3
  ### Asi como tambien para en un futuro cuando necesitemos buscar los jugadores de cada equipo usar el id para ingresar a ESPN
  ###Buscamos todas las td que contienen la class team
  elementos_equipos = soup.find_all("td", class_="team")

  ids_espn =  []
  for element in elementos_equipos:
    
    ### Ahi equipos mal formateados que nos daran error, normalmente son los mas nuevos, si necesitara explicar mas a fondo este codigo, haria uso de print para que vayamos 
    ### viendo las salidas de cada linea importante y asi ir moviendonos por python y html e ir tomando lo que necesitamos
    if "\n\t\t\t\t\t\t\t\t\t\t\t\t\tLeganes\n\t\t\t\t\t\t\t\t\t\t\t\t" in element:
        equipo = "Leganes"
        id_espn = "17534"
      
        Equipos.append(equipo)
        ids_espn.append(id_espn)
    elif "\n\t\t\t\t\t\t\t\t\t\t\t\t\tRB Leipzig\n\t\t\t\t\t\t\t\t\t\t\t\t" in element:
        equipo = "RB Leipzig "
        id_espn = "11420"
      
        Equipos.append(equipo)
        ids_espn.append(id_espn)
        
    ### Este else se ejecutara siempre que no sean ninguno de los 2 equipos raros de arriba es decir el 99% de las veces 😀
    else:
      
        ### Busca las href en las etiquetas a
        id_espn_sin_formato= element.a["href"]
        ### hacemos uso de RE para extraer el id de la url
        id_espn_sin = re.findall('http://www.espnfc.us/club/\S+?/([0-9]+?)/', id_espn_sin_formato)
        
        ### sacamos el id de la lista
        id_espn = id_espn_sin[0]
        
        ### Extraemos el nombre del equipo
        equipo = element.get_text()
        Equipos.append(equipo)
        
        ids_espn.append(id_espn)
        
  #print  Equipos
  
  #print ids_espn
  
  
  #print len(ids_espn)
  #print len(Equipos)
  
  ### Este bucle es innecesario pero decidi hacerlo asi
  count_eq = 0              
  for equipo in Equipos:
        nombre_equipo= equipo.strip()
        id_equipo_ESPN = ids_espn[count_eq]
        id_liga = liga_para_id
        cur = conn.cursor()
        cur.execute('''INSERT OR IGNORE INTO Equipos_Ligas (nombre_equipo, id_equipo_ESPN, id_liga) VALUES ( ?,?,? )''',(nombre_equipo,id_equipo_ESPN ,id_liga)) # Agregamos los datos a las ligas que queremos estudiar
        
        
        count_eq +=1

  liga_para_id += 1  
  contador += 1

### Imprimimos las ligas que tenemos

SQLSTR = "SELECT  *  FROM Ligas"


Equipos_Liga =  "SELECT  *  FROM Equipos_Ligas"
print
print
for word in cur.execute(SQLSTR):
    print str(word[0]),"La liga:", word[1] ,"Es de :",  word[2]
  
print
print
print

###Generamos los equipos de la liga con su id liga para saber a cual corresponden en un futuro

print "Equipos de la liga"
join_liga =  "SELECT * FROM Equipos_Ligas"


formato_equipos = []
for word in cur.execute(join_liga):
    print word
    formato_equipos.append(word)


count = 0
for word in formato_equipos:  ### AQui debo modificar el cur.execute por otra cosa ya que tengo cur.execute abajo y rompe el for
    id_equipo = word[0]
    nombre_equipo = word[1]
    id_equipo_ESPN =  word[2]
    id_liga = word[3]
    if nombre_equipo in tabla_formateada[count][1]:
        posicion = tabla_formateada[count][0]
        #print posicion
        ###Totales
        part_jugado = tabla_formateada[count][2]
        #print part_jugado
        p_gan = tabla_formateada[count][3]
        #print p_gan
        p_emp = tabla_formateada[count][4]
        #print p_emp
        p_per = tabla_formateada[count][5]
        #print p_per
        
        gol_favor = tabla_formateada[count][6]
        #print p_per
        gol_contra = tabla_formateada[count][7]
        #print gol_contra
        ###casa

        p_gan_casa = tabla_formateada[count][8]
        #print p_gan_casa
        
        p_emp_casa = tabla_formateada[count][9]
        #print p_emp_casa
        
        p_per_casa = tabla_formateada[count][10]
        #print p_per_casa
        
        gol_favor_casa = tabla_formateada[count][11]
        #print gol_favor_casa
        
        gol_contra_casa = tabla_formateada[count][12]
        #print gol_contra_casa
        
        ###visita

        
        p_gan_vis = tabla_formateada[count][13]
        #print p_gan_vis
        p_emp_vis = tabla_formateada[count][14]
        #print p_emp_vis
        p_per_vis = tabla_formateada[count][15]
        #print p_per_vis
        gol_favor_vis = tabla_formateada[count][16]
        #print gol_favor_vis
        gol_contra_vis = tabla_formateada[count][17]
        #print gol_contra_vis
        
        
        
        Dif_Gol = tabla_formateada[count][18]
        #print Dif_Gol
        
        Puntos_tot = tabla_formateada[count][19]
        #print Puntos_tot
        liga_fecha = str(liga_fecha_1) + str(id_equipo)
	#print liga_fecha
	#print id_equipo, id_liga, id_equipo_ESPN, nombre_equipo, posicion, Dif_Gol, Puntos_tot, liga_fecha
	
        
        cur.execute('''INSERT OR IGNORE INTO Posiciones_por_Fechas (id_equipo,id_liga, posicion, part_jugado, p_gan, p_emp, p_per, gol_favor, gol_contra,  p_gan_casa, p_emp_casa, p_per_casa, gol_favor_casa, gol_contra_casa,  p_gan_vis, p_emp_vis, p_per_vis, gol_favor_vis, gol_contra_vis, Dif_Gol, Puntos_tot, liga_fecha ) VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )''',(id_equipo,id_liga, posicion, part_jugado, p_gan, p_emp, p_per, gol_favor, gol_contra,  p_gan_casa, p_emp_casa, p_per_casa, gol_favor_casa, gol_contra_casa,  p_gan_vis, p_emp_vis, p_per_vis, gol_favor_vis, gol_contra_vis, Dif_Gol, Puntos_tot, liga_fecha )) # Agregamos los datos a las ligas que queremos estudiar
        
    count += 1

posiciones =  "SELECT * FROM Posiciones_por_Fechas"
print "Lo que nos interesa es esta salida"
for word in cur.execute(posiciones):
    print word

print "Salida combinada de 2 tablas"

formato_combinado = []

relacion_tablas = "select * from Equipos_Ligas A, Posiciones_por_Fechas B where A.id_equipo = B.id_equipo" 
for word in cur.execute(relacion_tablas):
    print word
    formato_combinado.append(word)
print "aqui la cosa se complica pero lo ue no podemos hacer con sql yo lo hago con python"
print "Salida combinada de 2 tablas con 1 sola liga :D"


formato_combinado_2 = []

relacion_tablas_con_liga = "select * from Equipos_Ligas AS C  JOIN Posiciones_por_Fechas  AS R ON C.id_equipo = R.id_equipo  AND R.id_liga = 2   " 
for word in cur.execute(relacion_tablas_con_liga):      

        print word


conn.commit()
cur.close()

Y esta es la Salida por partes:

Escriba El numero de la fecha a ingresar: 2


1 La liga: spanish-primera-division Es de : spanish
2 La liga: english-premier-league Es de : english
3 La liga: italian-serie-a Es de : italian
4 La liga: german-bundesliga Es de : german

La primera parte, debemos agregar manualmente la semana en la estamos, si lo hacemos mal y no tenemos guardada la base de datos, podemos tener una catástrofe, naaa solo con el mismo uso de sqlite y python podríamos arreglarlo al final 😀 quizá diga como en otra entrada algún día :D….

Ok agregamos la semana en este caso 2, pero luego también agregue 3 :S solo para hacer la prueba, debería colocar un guardián que si agrego 15 como semana y no se han jugado 15 juegos por equipo no me haga caso y me diga que deje de tomar(no tomo :D) o algo así, ok la primera data que recibimos es sobre la liga y el pais.

Equipos de la liga
(1, u'Las Palmas', 98, 1)
(2, u'Barcelona', 83, 1)
(3, u'Real Madrid', 86, 1)
(4, u'Sevilla FC', 243, 1)
(5, u'Sporting Gij\xf3n', 3788, 1)
(6, u'Deportivo La Coru\xf1a', 90, 1)
(7, u'Leganes', 17534, 1)
(8, u'Eibar', 3752, 1)
(9, u'Real Sociedad', 89, 1)
(10, u'M\xe1laga', 99, 1)
(11, u'Atletico Madrid', 1068, 1)
(12, u'Villarreal', 102, 1)
(13, u'Alav\xe9s', 96, 1)
(14, u'Espanyol', 88, 1)
(15, u'Osasuna', 97, 1)
(16, u'Granada', 3747, 1)
(17, u'Real Betis', 244, 1)
(18, u'Celta Vigo', 85, 1)
(19, u'Athletic Bilbao', 93, 1)
(20, u'Valencia', 94, 1)
(21, u'Manchester City', 382, 2)
(22, u'Chelsea', 363, 2)
(23, u'Manchester United', 360, 2)
(24, u'Everton', 368, 2)
(25, u'Hull City', 306, 2)
(26, u'Middlesbrough', 369, 2)
(27, u'Tottenham Hotspur', 367, 2)
(28, u'Arsenal', 359, 2)
(29, u'Leicester City', 375, 2)
(30, u'West Bromwich Albion', 383, 2)
(31, u'Liverpool', 364, 2)
(32, u'West Ham United', 371, 2)
(33, u'Burnley', 379, 2)
(34, u'Swansea City', 318, 2)
(35, u'Southampton', 376, 2)
(36, u'Sunderland', 366, 2)
(37, u'Crystal Palace', 384, 2)
(38, u'Watford', 395, 2)
(39, u'AFC Bournemouth', 349, 2)
(40, u'Stoke City', 336, 2)
(41, u'Genoa', 3263, 3)
(42, u'Juventus', 111, 3)
(43, u'Sampdoria', 2734, 3)
(44, u'AS Roma', 104, 3)
(45, u'US Pescara', 3290, 3)
(46, u'Napoli', 114, 3)
(47, u'Torino', 239, 3)
(48, u'Chievo Verona', 238, 3)
(49, u'Lazio', 112, 3)
(50, u'Fiorentina', 109, 3)
(51, u'AC Milan', 103, 3)
(52, u'Udinese', 118, 3)
(53, u'Sassuolo', 3997, 3)
(54, u'Bologna', 107, 3)
(55, u'Palermo', 2923, 3)
(56, u'Cagliari', 2925, 3)
(57, u'Internazionale', 110, 3)
(58, u'Atalanta', 105, 3)
(59, u'Crotone', 3173, 3)
(60, u'Empoli', 2574, 3)
(61, u'Bayern Munich', 132, 4)
(62, u'FC Cologne', 122, 4)
(63, u'VfL Wolfsburg', 138, 4)
(64, u'Borussia Dortmund', 124, 4)
(65, u'Hertha Berlin', 129, 4)
(66, u'Borussia Monchengladbach', 268, 4)
(67, u'Eintracht Frankfurt', 125, 4)
(68, u'TSG Hoffenheim', 7911, 4)
(69, u'RB Leipzig', 11420, 4)
(70, u'Hamburg SV', 127, 4)
(71, u'FC Ingolstadt 04', 6367, 4)
(72, u'SC Freiburg', 126, 4)
(73, u'Bayer Leverkusen', 131, 4)
(74, u'Mainz', 2950, 4)
(75, u'Schalke 04', 133, 4)
(76, u'SV Darmstadt 98', 3812, 4)
(77, u'FC Augsburg', 3841, 4)
(78, u'Werder Bremen', 137, 4)

Luego agregamos todos los equipo según las urls de cada liga, ojo al ejecutar el bucle generamos un contador en 1 que nos va agregando +1 y así generamos el id_liga para la tabla 1,2 y la tabla 3, podemos notar 78 equipos para las 4 ligas el ultimo numero es la id_liga a la que pertenece

Luego tenemos:

Lo que nos interesa es esta salida
(1, 1, 1, 1, 2, 2, 0, 0, 9, 3, 6, 1, 0, 0, 5, 1, 1, 0, 0, 2, 4, 6, 10003)
(2, 2, 1, 2, 2, 2, 0, 0, 7, 2, 5, 1, 0, 0, 6, 2, 1, 0, 0, 0, 1, 6, 20003)
(3, 3, 1, 3, 2, 2, 0, 0, 5, 1, 4, 1, 0, 0, 2, 1, 1, 0, 0, 0, 3, 6, 30003)
(4, 4, 1, 4, 2, 1, 1, 0, 6, 4, 2, 1, 0, 0, 6, 4, 0, 1, 0, 0, 0, 4, 40003)
(5, 5, 1, 5, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 1, 0, 0, 0, 4, 50003)
(6, 6, 1, 6, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 1, 0, 0, 0, 4, 60003)
(7, 7, 1, 7, 2, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 70003)
(8, 8, 1, 8, 2, 1, 0, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 1, 3, 80003)
(9, 9, 1, 9, 2, 1, 0, 1, 2, 3, -1, 0, 0, 1, 0, 3, 1, 0, 0, 0, 2, 3, 90003)
(10, 10, 1, 10, 2, 0, 2, 0, 3, 3, 0, 0, 1, 0, 1, 1, 0, 1, 0, 2, 2, 2, 100003)
(11, 11, 1, 11, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 2, 110003)
(12, 12, 1, 12, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 2, 120003)
(13, 13, 1, 13, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 2, 130003)
(14, 14, 1, 14, 2, 0, 1, 1, 6, 8, -2, 0, 1, 0, 2, 2, 0, 0, 1, 6, 4, 1, 140003)
(15, 15, 1, 15, 2, 0, 1, 1, 1, 3, -2, 0, 0, 1, 0, 2, 0, 1, 0, 1, 1, 1, 150003)
(16, 16, 1, 16, 2, 0, 1, 1, 2, 6, -4, 0, 1, 0, 1, 1, 0, 0, 1, 5, 1, 1, 160003)
(17, 17, 1, 17, 2, 0, 1, 1, 2, 6, -4, 0, 1, 0, 0, 0, 0, 0, 1, 6, 2, 1, 170003)
(18, 18, 1, 18, 2, 0, 0, 2, 1, 3, -2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 0, 180003)
(19, 19, 1, 19, 2, 0, 0, 2, 1, 3, -2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 0, 190003)
(20, 20, 1, 20, 2, 0, 0, 2, 2, 5, -3, 0, 0, 1, 2, 4, 0, 0, 1, 1, 0, 0, 200003)
(21, 21, 2, 1, 3, 3, 0, 0, 9, 3, 6, 2, 0, 0, 5, 2, 1, 0, 0, 1, 4, 9, 210003)
(22, 22, 2, 2, 3, 3, 0, 0, 7, 2, 5, 2, 0, 0, 5, 1, 1, 0, 0, 1, 2, 9, 220003)
(23, 23, 2, 3, 3, 3, 0, 0, 6, 1, 5, 1, 0, 0, 2, 0, 2, 0, 0, 1, 4, 9, 230003)
(24, 24, 2, 4, 3, 2, 1, 0, 4, 2, 2, 1, 1, 0, 2, 1, 1, 0, 0, 1, 2, 7, 240003)
(25, 25, 2, 5, 3, 2, 0, 1, 4, 2, 2, 1, 0, 1, 2, 2, 1, 0, 0, 0, 2, 6, 250003)
(26, 26, 2, 6, 3, 1, 2, 0, 3, 2, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 2, 5, 260003)
(27, 27, 2, 7, 3, 1, 2, 0, 3, 2, 1, 1, 1, 0, 2, 1, 0, 1, 0, 1, 1, 5, 270003)
(28, 28, 2, 8, 3, 1, 1, 1, 6, 5, 1, 0, 0, 1, 3, 4, 1, 1, 0, 1, 3, 4, 280003)
(29, 29, 2, 9, 3, 1, 1, 1, 3, 3, 0, 1, 1, 0, 2, 1, 0, 0, 1, 2, 1, 4, 290003)
(30, 30, 2, 10, 3, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 1, 4, 300003)
(31, 31, 2, 11, 3, 1, 1, 1, 5, 6, -1, 0, 0, 0, 0, 0, 1, 1, 1, 6, 5, 4, 310003)
(32, 32, 2, 12, 3, 1, 0, 2, 3, 5, -2, 1, 0, 0, 1, 0, 0, 0, 2, 5, 2, 3, 320003)
(33, 33, 2, 13, 3, 1, 0, 2, 2, 4, -2, 1, 0, 1, 2, 1, 0, 0, 1, 3, 0, 3, 330003)
(34, 34, 2, 14, 3, 1, 0, 2, 2, 4, -2, 0, 0, 1, 0, 2, 1, 0, 1, 2, 2, 3, 340003)
(35, 35, 2, 15, 3, 0, 2, 1, 2, 4, -2, 0, 2, 0, 2, 2, 0, 0, 1, 2, 0, 2, 350003)
(36, 36, 2, 16, 3, 0, 1, 2, 3, 5, -2, 0, 0, 1, 1, 2, 0, 1, 1, 3, 2, 1, 360003)
(37, 37, 2, 17, 3, 0, 1, 2, 1, 3, -2, 0, 1, 1, 1, 2, 0, 0, 1, 1, 0, 1, 370003)
(38, 38, 2, 18, 3, 0, 1, 2, 3, 6, -3, 0, 0, 2, 2, 5, 0, 1, 0, 1, 1, 1, 380003)
(39, 39, 2, 19, 3, 0, 1, 2, 2, 5, -3, 0, 0, 1, 1, 3, 0, 1, 1, 2, 1, 1, 390003)
(40, 40, 2, 20, 3, 0, 1, 2, 2, 6, -4, 0, 0, 1, 1, 4, 0, 1, 1, 2, 1, 1, 400003)
(41, 41, 3, 1, 2, 2, 0, 0, 6, 2, 4, 1, 0, 0, 3, 1, 1, 0, 0, 1, 3, 6, 410003)
(42, 42, 3, 2, 2, 2, 0, 0, 3, 1, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 1, 6, 420003)
(43, 43, 3, 3, 2, 2, 0, 0, 3, 1, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 1, 6, 430003)
(44, 44, 3, 4, 2, 1, 1, 0, 6, 2, 4, 1, 0, 0, 4, 0, 0, 1, 0, 2, 2, 4, 440003)
(45, 45, 3, 5, 2, 1, 1, 0, 5, 2, 3, 0, 1, 0, 2, 2, 1, 0, 0, 0, 3, 4, 450003)
(46, 46, 3, 6, 2, 1, 1, 0, 6, 4, 2, 1, 0, 0, 4, 2, 0, 1, 0, 2, 2, 4, 460003)
(47, 47, 3, 7, 2, 1, 0, 1, 7, 4, 3, 1, 0, 0, 5, 1, 0, 0, 1, 3, 2, 3, 470003)
(48, 48, 3, 8, 2, 1, 0, 1, 2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 1, 1, 0, 3, 480003)
(49, 49, 3, 9, 2, 1, 0, 1, 4, 4, 0, 0, 0, 1, 0, 1, 1, 0, 0, 3, 4, 3, 490003)
(50, 50, 3, 10, 2, 1, 0, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 1, 3, 500003)
(51, 51, 3, 11, 2, 1, 0, 1, 5, 6, -1, 1, 0, 0, 3, 2, 0, 0, 1, 4, 2, 3, 510003)
(52, 52, 3, 12, 2, 1, 0, 1, 2, 4, -2, 1, 0, 0, 2, 0, 0, 0, 1, 4, 0, 3, 520003)
(53, 53, 3, 13, 2, 1, 0, 1, 1, 3, -2, 0, 0, 1, 0, 3, 1, 0, 0, 0, 1, 3, 530003)
(54, 54, 3, 14, 2, 1, 0, 1, 2, 5, -3, 1, 0, 0, 1, 0, 0, 0, 1, 5, 1, 3, 540003)
(55, 55, 3, 15, 2, 0, 1, 1, 1, 2, -1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 550003)
(56, 56, 3, 16, 2, 0, 1, 1, 3, 5, -2, 0, 1, 0, 2, 2, 0, 0, 1, 3, 1, 1, 560003)
(57, 57, 3, 17, 2, 0, 1, 1, 1, 3, -2, 0, 1, 0, 1, 1, 0, 0, 1, 2, 0, 1, 570003)
(58, 58, 3, 18, 2, 0, 0, 2, 4, 6, -2, 0, 0, 1, 3, 4, 0, 0, 1, 2, 1, 0, 580003)
(59, 59, 3, 19, 2, 0, 0, 2, 1, 4, -3, 0, 0, 1, 1, 3, 0, 0, 1, 1, 0, 0, 590003)
(60, 60, 3, 20, 2, 0, 0, 2, 0, 3, -3, 0, 0, 1, 0, 1, 0, 0, 1, 2, 0, 0, 600003)
(61, 61, 4, 1, 1, 1, 0, 0, 6, 0, 6, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 3, 610003)
(62, 62, 4, 2, 1, 1, 0, 0, 2, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 620003)
(63, 63, 4, 2, 1, 1, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 630003)
(64, 64, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 640003)
(65, 65, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 650003)
(66, 66, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 660003)
(67, 67, 4, 7, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 670003)
(68, 68, 4, 8, 1, 0, 1, 0, 2, 2, 0, 0, 1, 0, 2, 2, 0, 0, 0, 0, 0, 1, 680003)
(69, 69, 4, 8, 1, 0, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 1, 690003)
(70, 70, 4, 10, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 700003)
(71, 71, 4, 10, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 710003)
(72, 72, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 720003)
(73, 73, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 730003)
(74, 74, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 740003)
(75, 75, 4, 15, 1, 0, 0, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 750003)
(76, 76, 4, 16, 1, 0, 0, 1, 0, 2, -2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 760003)
(77, 77, 4, 16, 1, 0, 0, 1, 0, 2, -2, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 770003)
(78, 78, 4, 18, 1, 0, 0, 1, 0, 6, -6, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 780003)

Aquí necesitamos observar que tenemos los campos tal como los agregamos al crear la tabla:

cur.execute('''
 CREATE TABLE IF NOT EXISTS Posiciones_por_Fechas (id_posiciones INTEGER PRIMARY KEY, id_equipo INTEGER NOT NULL,id_liga INTEGER NOT NULL , posicion INTEGER NOT NULL,
 part_jugado INTEGER NOT NULL, p_gan INTEGER NOT NULL ,p_emp INTEGER NOT NULL, p_per INTEGER NOT NULL, 
 gol_favor INTEGER NOT NULL, gol_contra INTEGER NOT NULL, Dif_Gol INTEGER NOT NULL,
 p_gan_casa INTEGER NOT NULL, p_emp_casa INTEGER NOT NULL, p_per_casa INTEGER NOT NULL, gol_favor_casa INTEGER NOT NULL ,
 gol_contra_casa INTEGER NOT NULL, p_gan_vis INTEGER NOT NULL, p_emp_vis INTEGER NOT NULL, p_per_vis INTEGER NOT NULL,
 gol_contra_vis INTEGER NOT NULL, gol_favor_vis INTEGER NOT NULL, Puntos_tot INTEGER NOT NULL ,
 liga_fecha INTEGER NOT NULL UNIQUE)''')

Debemos fijarnos que liga_fecha tiene una restricción de ser UNIQUE o única, pero para poder hacer esto, he tenido que hacer esta linea= “liga_fecha = str(id_equipo)+ ‘000’ + str(liga_fecha_1)” ya que no me entendí nunca por que el sqlite no me permite colocar varias columnas como PRIMARY  KEY y tampoco me permitia colocarle UNIQUE a varias columnas juntas por lo que decidí hacerlo con python así como un correlativo….

Luego tenemos esta ultima salida:

Salida combinada de 2 tablas
(1, u'Las Palmas', 98, 1, 1, 1, 1, 1, 2, 2, 0, 0, 9, 3, 6, 1, 0, 0, 5, 1, 1, 0, 0, 2, 4, 6, 10002)
(2, u'Barcelona', 83, 1, 2, 2, 1, 2, 2, 2, 0, 0, 7, 2, 5, 1, 0, 0, 6, 2, 1, 0, 0, 0, 1, 6, 20002)
(3, u'Real Madrid', 86, 1, 3, 3, 1, 3, 2, 2, 0, 0, 5, 1, 4, 1, 0, 0, 2, 1, 1, 0, 0, 0, 3, 6, 30002)
(4, u'Sevilla FC', 243, 1, 4, 4, 1, 4, 2, 1, 1, 0, 6, 4, 2, 1, 0, 0, 6, 4, 0, 1, 0, 0, 0, 4, 40002)
(5, u'Sporting Gij\xf3n', 3788, 1, 5, 5, 1, 5, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 1, 0, 0, 0, 4, 50002)
(6, u'Deportivo La Coru\xf1a', 90, 1, 6, 6, 1, 6, 2, 1, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 1, 0, 0, 0, 4, 60002)
(7, u'Leganes', 17534, 1, 7, 7, 1, 7, 2, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 70002)
(8, u'Eibar', 3752, 1, 8, 8, 1, 8, 2, 1, 0, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 1, 3, 80002)
(9, u'Real Sociedad', 89, 1, 9, 9, 1, 9, 2, 1, 0, 1, 2, 3, -1, 0, 0, 1, 0, 3, 1, 0, 0, 0, 2, 3, 90002)
(10, u'M\xe1laga', 99, 1, 10, 10, 1, 10, 2, 0, 2, 0, 3, 3, 0, 0, 1, 0, 1, 1, 0, 1, 0, 2, 2, 2, 100002)
(11, u'Atletico Madrid', 1068, 1, 11, 11, 1, 11, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 2, 110002)
(12, u'Villarreal', 102, 1, 12, 12, 1, 12, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 2, 120002)
(13, u'Alav\xe9s', 96, 1, 13, 13, 1, 13, 2, 0, 2, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 2, 130002)
(14, u'Espanyol', 88, 1, 14, 14, 1, 14, 2, 0, 1, 1, 6, 8, -2, 0, 1, 0, 2, 2, 0, 0, 1, 6, 4, 1, 140002)
(15, u'Osasuna', 97, 1, 15, 15, 1, 15, 2, 0, 1, 1, 1, 3, -2, 0, 0, 1, 0, 2, 0, 1, 0, 1, 1, 1, 150002)
(16, u'Granada', 3747, 1, 16, 16, 1, 16, 2, 0, 1, 1, 2, 6, -4, 0, 1, 0, 1, 1, 0, 0, 1, 5, 1, 1, 160002)
(17, u'Real Betis', 244, 1, 17, 17, 1, 17, 2, 0, 1, 1, 2, 6, -4, 0, 1, 0, 0, 0, 0, 0, 1, 6, 2, 1, 170002)
(18, u'Celta Vigo', 85, 1, 18, 18, 1, 18, 2, 0, 0, 2, 1, 3, -2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 0, 180002)
(19, u'Athletic Bilbao', 93, 1, 19, 19, 1, 19, 2, 0, 0, 2, 1, 3, -2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 0, 190002)
(20, u'Valencia', 94, 1, 20, 20, 1, 20, 2, 0, 0, 2, 2, 5, -3, 0, 0, 1, 2, 4, 0, 0, 1, 1, 0, 0, 200002)
(21, u'Manchester City', 382, 2, 21, 21, 2, 1, 3, 3, 0, 0, 9, 3, 6, 2, 0, 0, 5, 2, 1, 0, 0, 1, 4, 9, 210002)
(22, u'Chelsea', 363, 2, 22, 22, 2, 2, 3, 3, 0, 0, 7, 2, 5, 2, 0, 0, 5, 1, 1, 0, 0, 1, 2, 9, 220002)
(23, u'Manchester United', 360, 2, 23, 23, 2, 3, 3, 3, 0, 0, 6, 1, 5, 1, 0, 0, 2, 0, 2, 0, 0, 1, 4, 9, 230002)
(24, u'Everton', 368, 2, 24, 24, 2, 4, 3, 2, 1, 0, 4, 2, 2, 1, 1, 0, 2, 1, 1, 0, 0, 1, 2, 7, 240002)
(25, u'Hull City', 306, 2, 25, 25, 2, 5, 3, 2, 0, 1, 4, 2, 2, 1, 0, 1, 2, 2, 1, 0, 0, 0, 2, 6, 250002)
(26, u'Middlesbrough', 369, 2, 26, 26, 2, 6, 3, 1, 2, 0, 3, 2, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 2, 5, 260002)
(27, u'Tottenham Hotspur', 367, 2, 27, 27, 2, 7, 3, 1, 2, 0, 3, 2, 1, 1, 1, 0, 2, 1, 0, 1, 0, 1, 1, 5, 270002)
(28, u'Arsenal', 359, 2, 28, 28, 2, 8, 3, 1, 1, 1, 6, 5, 1, 0, 0, 1, 3, 4, 1, 1, 0, 1, 3, 4, 280002)
(29, u'Leicester City', 375, 2, 29, 29, 2, 9, 3, 1, 1, 1, 3, 3, 0, 1, 1, 0, 2, 1, 0, 0, 1, 2, 1, 4, 290002)
(30, u'West Bromwich Albion', 383, 2, 30, 30, 2, 10, 3, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 1, 4, 300002)
(31, u'Liverpool', 364, 2, 31, 31, 2, 11, 3, 1, 1, 1, 5, 6, -1, 0, 0, 0, 0, 0, 1, 1, 1, 6, 5, 4, 310002)
(32, u'West Ham United', 371, 2, 32, 32, 2, 12, 3, 1, 0, 2, 3, 5, -2, 1, 0, 0, 1, 0, 0, 0, 2, 5, 2, 3, 320002)
(33, u'Burnley', 379, 2, 33, 33, 2, 13, 3, 1, 0, 2, 2, 4, -2, 1, 0, 1, 2, 1, 0, 0, 1, 3, 0, 3, 330002)
(34, u'Swansea City', 318, 2, 34, 34, 2, 14, 3, 1, 0, 2, 2, 4, -2, 0, 0, 1, 0, 2, 1, 0, 1, 2, 2, 3, 340002)
(35, u'Southampton', 376, 2, 35, 35, 2, 15, 3, 0, 2, 1, 2, 4, -2, 0, 2, 0, 2, 2, 0, 0, 1, 2, 0, 2, 350002)
(36, u'Sunderland', 366, 2, 36, 36, 2, 16, 3, 0, 1, 2, 3, 5, -2, 0, 0, 1, 1, 2, 0, 1, 1, 3, 2, 1, 360002)
(37, u'Crystal Palace', 384, 2, 37, 37, 2, 17, 3, 0, 1, 2, 1, 3, -2, 0, 1, 1, 1, 2, 0, 0, 1, 1, 0, 1, 370002)
(38, u'Watford', 395, 2, 38, 38, 2, 18, 3, 0, 1, 2, 3, 6, -3, 0, 0, 2, 2, 5, 0, 1, 0, 1, 1, 1, 380002)
(39, u'AFC Bournemouth', 349, 2, 39, 39, 2, 19, 3, 0, 1, 2, 2, 5, -3, 0, 0, 1, 1, 3, 0, 1, 1, 2, 1, 1, 390002)
(40, u'Stoke City', 336, 2, 40, 40, 2, 20, 3, 0, 1, 2, 2, 6, -4, 0, 0, 1, 1, 4, 0, 1, 1, 2, 1, 1, 400002)
(41, u'Genoa', 3263, 3, 41, 41, 3, 1, 2, 2, 0, 0, 6, 2, 4, 1, 0, 0, 3, 1, 1, 0, 0, 1, 3, 6, 410002)
(42, u'Juventus', 111, 3, 42, 42, 3, 2, 2, 2, 0, 0, 3, 1, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 1, 6, 420002)
(43, u'Sampdoria', 2734, 3, 43, 43, 3, 3, 2, 2, 0, 0, 3, 1, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 1, 6, 430002)
(44, u'AS Roma', 104, 3, 44, 44, 3, 4, 2, 1, 1, 0, 6, 2, 4, 1, 0, 0, 4, 0, 0, 1, 0, 2, 2, 4, 440002)
(45, u'US Pescara', 3290, 3, 45, 45, 3, 5, 2, 1, 1, 0, 5, 2, 3, 0, 1, 0, 2, 2, 1, 0, 0, 0, 3, 4, 450002)
(46, u'Napoli', 114, 3, 46, 46, 3, 6, 2, 1, 1, 0, 6, 4, 2, 1, 0, 0, 4, 2, 0, 1, 0, 2, 2, 4, 460002)
(47, u'Torino', 239, 3, 47, 47, 3, 7, 2, 1, 0, 1, 7, 4, 3, 1, 0, 0, 5, 1, 0, 0, 1, 3, 2, 3, 470002)
(48, u'Chievo Verona', 238, 3, 48, 48, 3, 8, 2, 1, 0, 1, 2, 1, 1, 1, 0, 0, 2, 0, 0, 0, 1, 1, 0, 3, 480002)
(49, u'Lazio', 112, 3, 49, 49, 3, 9, 2, 1, 0, 1, 4, 4, 0, 0, 0, 1, 0, 1, 1, 0, 0, 3, 4, 3, 490002)
(50, u'Fiorentina', 109, 3, 50, 50, 3, 10, 2, 1, 0, 1, 2, 2, 0, 1, 0, 0, 1, 0, 0, 0, 1, 2, 1, 3, 500002)
(51, u'AC Milan', 103, 3, 51, 51, 3, 11, 2, 1, 0, 1, 5, 6, -1, 1, 0, 0, 3, 2, 0, 0, 1, 4, 2, 3, 510002)
(52, u'Udinese', 118, 3, 52, 52, 3, 12, 2, 1, 0, 1, 2, 4, -2, 1, 0, 0, 2, 0, 0, 0, 1, 4, 0, 3, 520002)
(53, u'Sassuolo', 3997, 3, 53, 53, 3, 13, 2, 1, 0, 1, 1, 3, -2, 0, 0, 1, 0, 3, 1, 0, 0, 0, 1, 3, 530002)
(54, u'Bologna', 107, 3, 54, 54, 3, 14, 2, 1, 0, 1, 2, 5, -3, 1, 0, 0, 1, 0, 0, 0, 1, 5, 1, 3, 540002)
(55, u'Palermo', 2923, 3, 55, 55, 3, 15, 2, 0, 1, 1, 1, 2, -1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 550002)
(56, u'Cagliari', 2925, 3, 56, 56, 3, 16, 2, 0, 1, 1, 3, 5, -2, 0, 1, 0, 2, 2, 0, 0, 1, 3, 1, 1, 560002)
(57, u'Internazionale', 110, 3, 57, 57, 3, 17, 2, 0, 1, 1, 1, 3, -2, 0, 1, 0, 1, 1, 0, 0, 1, 2, 0, 1, 570002)
(58, u'Atalanta', 105, 3, 58, 58, 3, 18, 2, 0, 0, 2, 4, 6, -2, 0, 0, 1, 3, 4, 0, 0, 1, 2, 1, 0, 580002)
(59, u'Crotone', 3173, 3, 59, 59, 3, 19, 2, 0, 0, 2, 1, 4, -3, 0, 0, 1, 1, 3, 0, 0, 1, 1, 0, 0, 590002)
(60, u'Empoli', 2574, 3, 60, 60, 3, 20, 2, 0, 0, 2, 0, 3, -3, 0, 0, 1, 0, 1, 0, 0, 1, 2, 0, 0, 600002)
(61, u'Bayern Munich', 132, 4, 61, 61, 4, 1, 1, 1, 0, 0, 6, 0, 6, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 3, 610002)
(62, u'FC Cologne', 122, 4, 62, 62, 4, 2, 1, 1, 0, 0, 2, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 620002)
(63, u'VfL Wolfsburg', 138, 4, 63, 63, 4, 2, 1, 1, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 630002)
(64, u'Borussia Dortmund', 124, 4, 64, 64, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 640002)
(65, u'Hertha Berlin', 129, 4, 65, 65, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 650002)
(66, u'Borussia Monchengladbach', 268, 4, 66, 66, 4, 4, 1, 1, 0, 0, 2, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 3, 660002)
(67, u'Eintracht Frankfurt', 125, 4, 67, 67, 4, 7, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 670002)
(68, u'TSG Hoffenheim', 7911, 4, 68, 68, 4, 8, 1, 0, 1, 0, 2, 2, 0, 0, 1, 0, 2, 2, 0, 0, 0, 0, 0, 1, 680002)
(69, u'RB Leipzig', 11420, 4, 69, 69, 4, 8, 1, 0, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 1, 690002)
(70, u'Hamburg SV', 127, 4, 70, 70, 4, 10, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 700002)
(71, u'FC Ingolstadt 04', 6367, 4, 71, 71, 4, 10, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 710002)
(72, u'SC Freiburg', 126, 4, 72, 72, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 720002)
(73, u'Bayer Leverkusen', 131, 4, 73, 73, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 730002)
(74, u'Mainz', 2950, 4, 74, 74, 4, 12, 1, 0, 0, 1, 1, 2, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 740002)
(75, u'Schalke 04', 133, 4, 75, 75, 4, 15, 1, 0, 0, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 750002)
(76, u'SV Darmstadt 98', 3812, 4, 76, 76, 4, 16, 1, 0, 0, 1, 0, 2, -2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 760002)
(77, u'FC Augsburg', 3841, 4, 77, 77, 4, 16, 1, 0, 0, 1, 0, 2, -2, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 770002)
(78, u'Werder Bremen', 137, 4, 78, 78, 4, 18, 1, 0, 0, 1, 0, 6, -6, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 780002)

Esta salida no es mas que la combinacion de 2 tablas que sabemos que tienen relación y es esta que le hemos dado ” relacion_tablas = “select * from Equipos_Ligas A, Posiciones_por_Fechas B where A.id_equipo = B.id_equipo” “, para poder ver lo que hemos visto arriba, luego si queremos ver 1 sola liga tenemos esta salida:

 

aqui la cosa se complica pero lo ue no podemos hacer con sql yo lo hago con python
Salida combinada de 2 tablas con 1 sola liga 😀
(21, u'Manchester City', 382, 2, 21, 21, 2, 1, 3, 3, 0, 0, 9, 3, 6, 2, 0, 0, 5, 2, 1, 0, 0, 1, 4, 9, 210002)
(22, u'Chelsea', 363, 2, 22, 22, 2, 2, 3, 3, 0, 0, 7, 2, 5, 2, 0, 0, 5, 1, 1, 0, 0, 1, 2, 9, 220002)
(23, u'Manchester United', 360, 2, 23, 23, 2, 3, 3, 3, 0, 0, 6, 1, 5, 1, 0, 0, 2, 0, 2, 0, 0, 1, 4, 9, 230002)
(24, u'Everton', 368, 2, 24, 24, 2, 4, 3, 2, 1, 0, 4, 2, 2, 1, 1, 0, 2, 1, 1, 0, 0, 1, 2, 7, 240002)
(25, u'Hull City', 306, 2, 25, 25, 2, 5, 3, 2, 0, 1, 4, 2, 2, 1, 0, 1, 2, 2, 1, 0, 0, 0, 2, 6, 250002)
(26, u'Middlesbrough', 369, 2, 26, 26, 2, 6, 3, 1, 2, 0, 3, 2, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 2, 5, 260002)
(27, u'Tottenham Hotspur', 367, 2, 27, 27, 2, 7, 3, 1, 2, 0, 3, 2, 1, 1, 1, 0, 2, 1, 0, 1, 0, 1, 1, 5, 270002)
(28, u'Arsenal', 359, 2, 28, 28, 2, 8, 3, 1, 1, 1, 6, 5, 1, 0, 0, 1, 3, 4, 1, 1, 0, 1, 3, 4, 280002)
(29, u'Leicester City', 375, 2, 29, 29, 2, 9, 3, 1, 1, 1, 3, 3, 0, 1, 1, 0, 2, 1, 0, 0, 1, 2, 1, 4, 290002)
(30, u'West Bromwich Albion', 383, 2, 30, 30, 2, 10, 3, 1, 1, 1, 2, 2, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 1, 4, 300002)
(31, u'Liverpool', 364, 2, 31, 31, 2, 11, 3, 1, 1, 1, 5, 6, -1, 0, 0, 0, 0, 0, 1, 1, 1, 6, 5, 4, 310002)
(32, u'West Ham United', 371, 2, 32, 32, 2, 12, 3, 1, 0, 2, 3, 5, -2, 1, 0, 0, 1, 0, 0, 0, 2, 5, 2, 3, 320002)
(33, u'Burnley', 379, 2, 33, 33, 2, 13, 3, 1, 0, 2, 2, 4, -2, 1, 0, 1, 2, 1, 0, 0, 1, 3, 0, 3, 330002)
(34, u'Swansea City', 318, 2, 34, 34, 2, 14, 3, 1, 0, 2, 2, 4, -2, 0, 0, 1, 0, 2, 1, 0, 1, 2, 2, 3, 340002)
(35, u'Southampton', 376, 2, 35, 35, 2, 15, 3, 0, 2, 1, 2, 4, -2, 0, 2, 0, 2, 2, 0, 0, 1, 2, 0, 2, 350002)
(36, u'Sunderland', 366, 2, 36, 36, 2, 16, 3, 0, 1, 2, 3, 5, -2, 0, 0, 1, 1, 2, 0, 1, 1, 3, 2, 1, 360002)
(37, u'Crystal Palace', 384, 2, 37, 37, 2, 17, 3, 0, 1, 2, 1, 3, -2, 0, 1, 1, 1, 2, 0, 0, 1, 1, 0, 1, 370002)
(38, u'Watford', 395, 2, 38, 38, 2, 18, 3, 0, 1, 2, 3, 6, -3, 0, 0, 2, 2, 5, 0, 1, 0, 1, 1, 1, 380002)
(39, u'AFC Bournemouth', 349, 2, 39, 39, 2, 19, 3, 0, 1, 2, 2, 5, -3, 0, 0, 1, 1, 3, 0, 1, 1, 2, 1, 1, 390002)
(40, u'Stoke City', 336, 2, 40, 40, 2, 20, 3, 0, 1, 2, 2, 6, -4, 0, 0, 1, 1, 4, 0, 1, 1, 2, 1, 1, 400002)

Esta salida es un poco mas complicada y se logra con el siguiente comando “relacion_tablas_con_liga = “select * from Equipos_Ligas AS C  JOIN Posiciones_por_Fechas  AS R ON C.id_equipo = R.id_equipo  AND R.id_liga = 2   ”  “ es necesario acotar que si quitamos la clausula WHERE obtenemos la salida anterior 😀

Hasta aquí esta entrada espero que se hayan divertido, ya que seguiré trabajando en una ultima entrada para entrar con ODOO y scraping mas otras cosas si Dios lo permite, por lo pronto que Dios siga bendiciendo sus vidas y nos de fuerzas par resistir al mal así el huirá de nosotros…

 

Eliminar Caracteres Especiales tipo \n \t de cadenas en Python

Tenia un problema con varias tablas de ESPN que me daban los nombres de los equipos con caracteres especiales, por ejemplo:

 u'\n\t\t\t\t\t\t\t\t\t\t\t\t\tRB Leipzig\n\t\t\t\t\t\t\t\t\t\t\t\t' 

Lo que hacia que PrettyTable hiciera los saltos en la tabla y se desconfigurara, en el libro Python para informáticos, que es el que usamos en toda la especialización vimos algunos ejemplos de como formatear este tipo de caracteres pero no recordaba :S

Así que buscando en la red encontré soluciones como esta: Eliminar Caracteres Epeciales

Pero de verdad dejan bastante que pensar, y yo pensé que debería haber una forma mas Pythonica :D, así que buscando en la Web encontré esta entrada que leí de reojo y recordé el método salvador :D, asi se ve en mi código:

 equipo_nom = equipo_nom.strip() 

Y aqui te dejo un ejemplo de lo que estoy hablando:

>>> cadena = u'\n\t\t\t\t\t\t\t\t\t\t\t\t\tRB Leipzig\n\t\t\t\t\t\t\t\t\t\t\t\t'
>>> cadena.strip()
u'RB Leipzig'

Bueno eso era todo en un rato subo el Código final de la Tabla de posiciones para multi Ligas en Python con ESPN

Que Dios Les Bendiga, hasta luego

 

Manejando SQL (Sqlite3) en Python [Parte 1]

Les cuento he estado haciendo algunas pruebas para optar en un trabajo en BairesDev y de verdad me he dado cuenta que me faltan conocimientos en: Javascript, Jquery(claro), SQL y algunos otros pero no tanto como en estas 3, podría trabajar en un proyecto pero mas pronto que tarde tendría que estar buscando la manera de hacer algo que nunca he hecho en estos 3 lenguajes(por darles un nombre) y tendría que recurrir a libros o ayuda online lo que retrasaría un poco mi desempeño, es por esto que voy a comenzar esta serie, ya que estoy leyendo este tutorial de SQL http://sql-principiantes.blogspot.com/ claro que entiendo el código pero aveces se me olvida y el manual esta dirigido a Windows, y también algunos de Python y sqlite3 :S por lo que decidí crear la entrada para tener la información y practicar….

El primer código consiste en crear una Base de Datos e insertar unos datos aquí el código, que con los conocimientos obtenidos en La especialización de python Genere(Claro vamos a ir haciéndole mejoras :D):


import sqlite3

conn = sqlite3.connect('empresa.sqlite3')

cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS personas ')
cur.execute('''CREATE TABLE Personas ( id INTEGER PRIMARY KEY AUTOINCREMENT, Nombre char(20) NOT NULL, Apellidos char(30) NOT NULL, Direccion char(40) NOT NULL, Ciudad char(10) NOT NULL) ''')

cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)',('Marco Antonio','Trejo Lemus','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)',('Martha Beatriz','Trejo Lemus','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)', ('Juana Elvira','Trejo Lemus','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)', ('Nora Zulma','Trejo Lemus','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)',('Laura Lucero','Sobrevilla Trejo','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)',('Maria de la luz','Trejo Campos','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)', ('Trinidad','Trejo Bautista','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)',('Marcel Abisag','Sobrevilla Trejo','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)', ('Jose Abraham','Sobrevilla Trejo','Calle E 822','Tampico') )
cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)', ('Samuel Salomon','Olmeda Trejo','Calle E 822','Tampico'))
cur.execute('select * from Personas')

for row in cur:
print row

conn.close()

Recuerda esto es python y esta es la salida:

(1, u'Marco Antonio', u'Trejo Lemus', u'Calle E 822', u'Tampico')
(2, u'Martha Beatriz', u'Trejo Lemus', u'Calle E 822', u'Tampico')
(3, u'Juana Elvira', u'Trejo Lemus', u'Calle E 822', u'Tampico')
(4, u'Nora Zulma', u'Trejo Lemus', u'Calle E 822', u'Tampico')
(5, u'Laura Lucero', u'Sobrevilla Trejo', u'Calle E 822', u'Tampico')
(6, u'Maria de la luz', u'Trejo Campos', u'Calle E 822', u'Tampico')
(7, u'Trinidad', u'Trejo Bautista', u'Calle E 822', u'Tampico')
(8, u'Marcel Abisag', u'Sobrevilla Trejo', u'Calle E 822', u'Tampico')
(9, u'Jose Abraham', u'Sobrevilla Trejo', u'Calle E 822', u'Tampico')
(10, u'Samuel Salomon', u'Olmeda Trejo', u'Calle E 822', u'Tampico')

Ya logramos una parte del ejercicio pero en python siempre hay una manera mas fácil de hacer las cosas :D, si por ejemplo tenemos los datos en una lista y los vamos agregando así:


import sqlite3

conn = sqlite3.connect('empresa.sqlite3')

cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS personas  ')


cur.execute('''CREATE TABLE Personas ( id INTEGER PRIMARY KEY AUTOINCREMENT, Nombre char(20) NOT NULL, Apellidos char(30) NOT NULL, Direccion char(40) NOT NULL, Ciudad char(10) NOT NULL) ''')


datos = [
    ('Marco Antonio','Trejo Lemus','Calle E 822','Tampico'),
    ('Martha Beatriz','Trejo Lemus','Calle E 822','Tampico'),
    ('Juana Elvira','Trejo Lemus','Calle E 822','Tampico'),
    ('Nora Zulma','Trejo Lemus','Calle E 822','Tampico'),
    ('Laura Lucero','Sobrevilla Trejo','Calle E 822','Tampico'),
    ('Maria de la luz','Trejo Campos','Calle E 822','Tampico'),
    ('Trinidad','Trejo Bautista','Calle E 822','Tampico'),
    ('Marcel Abisag','Sobrevilla Trejo','Calle E 822','Tampico'),
    ('Jose Abraham','Sobrevilla Trejo','Calle E 822','Tampico'),    
    ('Samuel Salomon','Olmeda Trejo','Calle E 822','Tampico'),
]
for dato in datos:
    cur.execute('INSERT INTO Personas (Nombre,Apellidos,Direccion,Ciudad) VALUES ( ?,? , ?, ?)', dato)
  


cur.execute('select * from Personas')

for row in cur:
    print row

conn.close()


La salida es la misma solo quería agregarlos datos con un ciclo for sin necesidad de agregar linea por linea, aunque ya algo hemos visto en la otra serie de Twitter, les recuerdo que voy a comenzar  a hablar  de Javascript en el blog y en un futuro cercano colocar algunas entradas en ingles 😀

Saludos Dios les Bendiga e Ilumine sus caminos

 

Openerp Imprimir Imagen de Formulario ODOO a Reporte Webkit Mako

Hoy vamos a aprender a agregar una imagen a nuestros reportes Mako en Openerp/ODOO, parece tonto pero hay que saber donde dar el martillazo, De verdad no sabia que nombre colocarle a la entrada es que busque esto con diferentes nombre durante cerca de 20 minutos iba probando y nada :D, jejeje es que siempre me tocaba imprimir el logo de la empresa nunca me toco imprimir el de otra empresa en los reportes y mucho menos una foto de un usuario, pero como a mi siempre me gusta aprender cosas nuevas decidí buscar la solución 😀

Ademas este proyecto es propio es decir es algo que yo estoy haciendo por mi cuenta así que se me pueden ocurrir cosas descabelladas, no se asusten 😀

Podría colocarle como nombre a esta entrada uno de los siguientes(lo coloco para que el buscador me tome en cuenta :D);

Odoo Insertar foto en Reportes Webkit

Insertar Imagen en Reportes Mako Openerp o ODOO

Openerp Insertar imagen, logo o foto en Reportes

ODOO imprimir imagen en Reportes Mako Webkit

Por eso coloque el titulo tan largo :D, yo busque así y no recuerdo con cual frase lo encontré…. Bueno manos a la obra

Les explico mi proyecto trata de una red social como Computrabajo, Bumerang, Freelancer entre otras pero que ademas les dejen crear su propio curriculum totalmente personalizado, con estilos y diseños predefinidos(espero este mes que viene comenzar con esto y darles entrada como Betatester)

Como les decía tenemos la foto del usuario que esta creando el Curriculum y queremos insertarla en el PDF, la siguiente es la solución, colocarnos en el archivo MAKO y agregar una linea como esta donde deseen:


<img src="data:image/jpeg;base64,${inv.foto_personal}" />

Ademas podemos definir con coordenadas donde queremos colocar dicha foto o imagen así


<img class="foto_personal" height="150.0" src="data:image/jpeg;base64,${inv.foto_personal}" />

Aqui encontraremos el tamaño definido para la foto y una clase que se llama foto_personal que debe estar contenida en el css/style mas o menos el código generado seria este:


<html>

<head>

<style>
${css}


.foto_personal {

position: absolute;
top: 1.5cm;
left:0.25cm;
}
</style>

</head>
<body>

<%
def carriage_returns(text):
return text.replace('\n', '
')

%>
%for inv in objects:

<td class="curriculum_vitae"><B>Sintesis Curricualr</B></td>


<table class="informacion_perfil">
<img class="foto_personal" height="150.0" src="data:image/jpeg;base64,${inv.foto_personal}" />

</table>


%endfor

This is my web-kit report
</body>
</html>

Tambien podemos usar esta:


<img>${helper.embed_image('png', company.logo, 145, 35)|n}
</img>

Donde especificamos que la imagen es PNG y la altura es 145 y anchura 35, ademas hay un salto de linea, fíjate que puedes colocar el campo que desees aquí usamos el logo de la empresa 😀

Bueno si necesitan ayuda en algo parecido no duden en escribirme, ademas trabajo como freelancer si necesitan programar algo para ODOO o las APIs 😀

Dios les Bendiga, Comentar es Gratis

Informacion sacada de aqui:

http://stackoverflow.com/questions/16437590/how-can-i-get-logo-of-curent-comoany-in-openerp-and-us-it-in-webkit-report