Mostrando las entradas con la etiqueta php. Mostrar todas las entradas
Mostrando las entradas con la etiqueta php. Mostrar todas las entradas

jueves, junio 12, 2008

Acceso a MSSQL desde Python / PHP


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.

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)

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


Ejemplo y configuración:

  • http://pymssql.sourceforge.net/example_pymssql.html

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)



  • 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

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 :)


jueves, abril 10, 2008

Disponibles apuntes de los seminarios de LAMP y virtualización sobre VirtualBox

Listos algunos apuntes:

  • El pasado seminario de LAMP
  • El futuro seminario de virtualización con VirtualBox

Respecto de este último, es una guía APB, paso a paso para dejar la maquina virtual, en la red de las maquinas reales, como un equipo mas. Lo escribí porque me acuerdo de los pasos, pero no del orden.



Se encuentran en http://www.bunker.org.ar/incubadora