#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Este script, exporta la base de datos de GeoLite de paises y ciudades
a base de datos mysql
Descargar la base de datos de:
http://dev.maxmind.com/geoip/legacy/geolite/
- GeoLite Country CSV/Zip
http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
- GeoLite City CSV/Zip
http://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity-latest.zip
Tienen que existis la base de datos `world` con las tablas:
CREATE TABLE IF NOT EXISTS `Paises` (
`Codigo` varchar(2) NOT NULL,
`Pais` varchar(100) NOT NULL,
PRIMARY KEY (`Codigo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `Ciudades` (
`idCiudades` int not null auto_increment,
`Paises_Codigo` varchar(2) NOT NULL,
`Ciudad` varchar(100) NOT NULL,
PRIMARY KEY (`idCiudades`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER TABLE `Ciudades` ADD index `Paises_Codigo`(`Paises_Codigo`);
ALTER TABLE `Ciudades` ADD index `Ciudad`(`Ciudad`);
"""
import sys
import _mysql
import MySQLdb
# informacion de la base de datos
host="localhost"
user="all"
pw="all"
port=3306
database="world"
# conectamos con la base de datos
try:
db=_mysql.connect(host=host,user=user,passwd=pw,port=port,db=database)
except (_mysql.DatabaseError,_mysql.DataError,_mysql.Error,_mysql.IntegrityError,_mysql.InterfaceError,_mysql.InternalError,_mysql.MySQLError,_mysql.NotSupportedError,_mysql.OperationalError),e:
print "Error: %s - %s" % (e[0],e[1])
sys.exit()
except:
print "Error desconocido"
sys.exit()
# exportamos los paises
f=file("GeoIPCountryWhois.csv", "r")
db.query("DELETE FROM Paises")
db.query("ALTER TABLE Paises AUTO_INCREMENT = 0")
count=0
# hacemos un bucle hasta final de archivo
for line in f.read().splitlines():
values=line.split(",")
# unicamente guardaremos el codigo del pais y su nombre
sql='INSERT INTO Paises VALUES ("%s", "%s")' % (values[4][1:-1], values[5][1:-1])
try:
db.query(sql)
count+=1
except:
# cada vez que haya un registro repetido dara un error, ya
# que el campo Codigo es una clave primaria
pass
f.close()
print "se han añadido %s paises" % count
# exportamos las ciudades
f=file("GeoLiteCity-Location.csv", "r")
db.query("DELETE FROM Ciudades")
db.query("ALTER TABLE Ciudades AUTO_INCREMENT = 0")
count=0
lines=0
# hacemos un bucle hasta final de archivo
for line in f.read().splitlines():
values=line.split(",")
lines+=1
# empezamos a partir de la tercera linea,. ya que las dos primeras
# lineas contienen comentarios
if lines>2 and values[3][1:-1]:
# revisamos que no exista ya en la base de datos
sql='SELECT idCiudades FROM Ciudades WHERE Paises_Codigo="%s" AND Ciudad="%s"' % (values[1][1:-1], values[3][1:-1])
db.query(sql)
if not db.store_result().fetch_row():
count+=1
sql='INSERT INTO Ciudades (Paises_Codigo,Ciudad) VALUES ("%s", "%s")' % (values[1][1:-1], values[3][1:-1])
db.query(sql)
f.close()
print "se han añadido %s ciudades" % count
Comentarios sobre la versión: Versión 1 (0)
No hay comentarios