Sistemas operativos: Linux y Windows
Notas y posible apunte de alumnos
Comic: http://the-geek.org/xkcd-es/strips/python/
Comprobado en MSSQL 2000 Enterprise en ingles, con SP2 (en inglés también). La versión en español presentaba problemas aleatorios de acceso al puerto 1433, y no traía la simpática base Northwind.Comic: http://the-geek.org/xkcd-es/strips/python/
Notas importantes
Importación de base anterior, en MySQL:
- http://www.microsoft.com/technet/prodtechnol/sql/2000/deploy/mysql.mspx
Codificación
El primer cabezazo serio trabajando con Python/PHP y contra MSSQL, sobre Windows / Linux / BSD, seguramente serán las codificaciones. En términos generales:
(Fixme):
- Las ventanas trabajan en UTF-8
- Las consolas Linux (actuales), en UTF-8
- Las consolas BSD, en ISO8859
- MSDOS, en ASCII
- Las bases de datos, en ISOnnnnn o tambien, latin1
He dejado varios vínculos útiles en http://del.icio.us/karancho/utf-8
#Ejemplo con datos de MSSQL, base Northwind
print unicode(oRS.Fields.Item("ShipAddress"))
#Ejemplo decodeando un valor dentro de un array, procedente de MySQL, via ADODB, en
#latin1 (ISO8859-15, creo), y repleto de acentos y caracteres raros
print arreglo['curso'].decode('latin1')
#Ejemplo para cargar un wx.grid, en una posición determinada
nombre = arr['nombre'].decode('latin1')
grid.SetCellValue(i, 2, nombre)
#Ejemplo con datos de MSSQL, base Northwind
print unicode(oRS.Fields.Item("ShipAddress"))
#Ejemplo decodeando un valor dentro de un array, procedente de MySQL, via ADODB, en
#latin1 (ISO8859-15, creo), y repleto de acentos y caracteres raros
print arreglo['curso'].decode('latin1')
#Ejemplo para cargar un wx.grid, en una posición determinada
nombre = arr['nombre'].decode('latin1')
grid.SetCellValue(i, 2, nombre)
Mapa
| MSSQL | Desde Linux | Dentro de Windows |
| Python | Ejemplo 2 | Ejemplo 3 |
| PHP | Ejemplo 1 | Idem Ejemplo 1 |
Ejemplo 1: Cliente: Linux + PHP -> Destino: Windows con MSSQL
- Paquetes necesarios en Ubuntu: php5-adodb y php5-sybase
- En Windows, con los componentes ADODB que trae XAMPP es suficiente.
- ¡No copiar código desde aquí!, hacerlo desde http://pastebin.lugmen.org.ar/4164
<?php
print "
<HEAD>
<!-- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/> -->
<!-- Codificaciones debido a los acentos procedentes de SQL Server -->
<meta http-equiv='Content-Type' content='text/html; charset=windows-1252'/>
<!-- <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/> -->
</HEAD>
";
$resource=mssql_connect("192.168.1.151","sa","coso");
mssql_select_db("Northwind",$resource);
$sql="SELECT * FROM Orders";
$respuesta=mssql_query($sql,$resource);
while ($fila = mssql_fetch_object($respuesta) ) echo "<p>".$fila->ShipCity;
?>
Ejemplo 2: Cliente: Linux + Python-> Destino: Windows con MSSQL
- Modulo: http://pymssql.sourceforge.net/
- Por qué no usar ADODB, como en los otros ejemplos? Porque requiere de componentes con licencia
Ejemplo y configuración:
- http://pymssql.sourceforge.net/example_pymssql.html
- http://codeghar.wordpress.com/2007/12/08/connect-to-database-using-python/#respond
- ¡No copiar código desde aquí!, hacerlo desde http://pastebin.lugmen.org.ar/4162
Editores: SPE, Geany, Gvim
Ejemplo de Código
import pymssql
con = pymssql.connect(host='192.168.1.151',user='sa',
password='coso',database='Northwind')
cur = con.cursor()
query="select * from Orders;"
for x in range(10):
cur.execute(query)
while 1:
print "n"
print cur.fetchall()
if 0 == cur.nextset():
break
Ejemplo 3: Computadora corriendo Windows + Python + MSSQL
(con ADO)
(con ADO)
- Python for Windows Extensions: http://starship.python.net/crew/mhammond/
- Aunque yo usé: http://sourceforge.net/projects/pywin32/
- Estas pruebas las he realizado con MSSQL 2000. Con MSSQL 2005, al poderse usar ODBC sobre SQL server, hay una manera mas simple, documentada en http://www.time-travellers.org/shane/howtos/MS-SQL-Express-Python-HOWTO.html
- Ejemplo y configuración: http://www.mayukhbose.com/python/ado/ado-python.php
- ¡No copiar código desde aquí!, hacerlo desde http://pastebin.lugmen.org.ar/4163
Ejemplo de Código
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# First import two useful modules
from win32com.client import Dispatch
from adoconstants import *
# Create the ADO Connection object via COM.
oConn = Dispatch('ADODB.Connection')
# Now set the connection properties via the ConnectionString
# We're connecting to a SQL Server on 192.168.1.100 using OLEDB.
oConn.ConnectionString = "Provider=SQLOLEDB.1;Data Source=OREGANOOREGANO;" + "uid=sa;pwd=coso;database=Northwind"
oConn.Open()
# Now create a RecordSet object and open a table
oRS = Dispatch('ADODB.RecordSet')
oRS.ActiveConnection = oConn # Set the recordset to connect thru oConn
oRS.Open("Orders")
#print oRS.Fields.Item(0), oRS.Fields(1)
while not oRS.EOF:
#El siguiente print requiere de convertir los datos procedentes de SQL, en ISO, hacia unicode
#Se agradece el comentario de : http://sebsauvage.net/python/snyppets/#unicode
print unicode(oRS.Fields.Item("ShipAddress"))
oRS.MoveNext()
Espero que sirva :)
