Empecé a usar web2py hace muy poquito, así que pido disculpas si mis
consultas son demasiado básicas (de hecho, tengo unas cuantas
consultas, pero iré creando distintos posts con títulos descriptivos,
para que quien busca pueda encontrar respuesta rápidamente).
Estoy creando un sitio web en web2py. El mismo cuenta con 3
aplicaciones, "pyLicencias", "ciudadanos" y "turnos". Para las tres
aplicaciones, he definido una única base de datos. Todas las
aplicaciones se conectan a la misma base de datos, hecha en
postgresql, por lo que incluí la siguiente instrucción: "db =
DAL('postgres://user:password@localhost/pyLicencias')" en cada archivo
db.py de cada aplicación. (¿es esto correcto?).
Ahora bien, el modelo de base de datos (todos los db.define_table...)
están en el archivo db.py de la aplicación inicial, que es
"pyLicencias". Yo necesito acceder a dicha base de datos desde las
otras aplicaciones: "turnos" y "ciudadanos".
Por ejemplo, en el controlador "default" de la aplicación ciudadanos,
en la función "index", quiero seleccionar todos los ciudadanos de la
tabla "ciudadanos" y mostrarlos en una vista. Pero cuando intento
acceder a "db.ciudadanos", recibo el mensaje de "key error", es decir,
web2py no encuentra la tabla "ciudadanos".
Entonces: ¿cómo hago para utilizar una misma base de datos en varias
las aplicaciones web2py?
Yo antes usaba Django, y hacía algo como "from
mysite.myapplication.models import *", y eso me importaba todas las
clases definidas en el modelo de datos. ¿Hay algún método similar en
web2py?
Desde ya muchísimas gracias!
Y por supuesto, espero poder ayudar a otros usuarios, esto es, sólo
cuando domine mejor el framework!! :)
db=SQLDB('sqlite://storage.db')
db.define_table(.....)
y las otras apl. definen:
db=SQLDB('sqlite://../../masterapp/databases/storage.db')
db.define_table(.....,migrate=False) #### importante!
Si usas una BD diferente a SQLite la conexión db=SQLDB(...) es
idéntica para las tres aplicaciones pero debes conservar el
migrate=False en las tablas de las apl. no maestras.
Nota: la apl. maestra debe definir todas las tablas, las otras solo
las tablas que usan.
Cada plugin es una mini-aplicación, que puede tener su modelo
(definición de base de datos), controladores, etc., y luego se pueden
incorporar a una aplicación más facilmente (y no hace falta importar
el modelo como en django, también se pueden distribuir por separado,
etc.)
Sds
Mariano Reingart
http://reingart.blogspot.com
2010/2/23 DenesL <dene...@yahoo.ca>:
Lo que comentás de separar una app en varios controladores (turnos,
ciudadanos, etc.) es interesante , incluso podes separar los modelos
en varios archivos (db_turnos.py, db_ciudadanos.py, etc), para tener
todo mas o menos independiente sin llegar a tener que usar plugins
(pero en este caso web2py no te va a organizar de forma separada
automáticamente)
Yo te diría que pruebes uno y otro enfoque, y te fijes cual te
conviene más (y analises realmente en que medida cada parte es
independiente).
web2py es bastante flexible y rápido como para armar estos prototipos :-)
Sds
Mariano
2010/2/23 Lisandro Rostagno <rostagno...@gmail.com>:
On Feb 23, 3:26 pm, Mariano Reingart <reing...@gmail.com> wrote:
> No entiendo la complejidad (es lo mismo que como comentabas con
> django: un plugin web2py es similar a una app de django), de hecho
> hasta puede ser más fácil, y automáticamente te lo organiza de forma
> separada y reusable, pudiendo descargar el tgz e implementarlo en otro
> lado.
>
> Lo que comentás de separar una app en varios controladores (turnos,
> ciudadanos, etc.) es interesante , incluso podes separar los modelos
> en varios archivos (db_turnos.py, db_ciudadanos.py, etc), para tener
> todo mas o menos independiente sin llegar a tener que usar plugins
> (pero en este caso web2py no te va a organizar de forma separada
> automáticamente)
>
Hay que tener cuidado, los modelos se ejecutan en orden alfabético.
> Yo te diría que pruebes uno y otro enfoque, y te fijes cual te
> conviene más (y analises realmente en que medida cada parte es
> independiente).
> web2py es bastante flexible y rápido como para armar estos prototipos :-)
>
> Sds
> Mariano
>
> 2010/2/23 Lisandro Rostagno <rostagnolisan...@gmail.com>:
>
> > Ok, entiendo... Investigué un poco, y es realmente útil la funcionalidad de
> > los plugins... (de hecho, al ver algunos plugins se me ocurrieron algunas
> > ideas interesantes para el sitio)...
>
> > Pero me parece que, para mi caso en particular, los plugins no son lo más
> > adecuado. Si bien solucionan mi problema, al usar plugins estaría agregando
> > cierta complejidad, y en realidad lo único que necesito es poder usar la
> > misma base de datos en distintas aplicaciones, nada más.
>
> > Se me ocurre lo siguiente: en lugar de hacer varias aplicaciones, hago una
> > única aplicación. Y en lugar de tener todo el código de controladores dentro
> > del archivo "default.py", puedo crear varios archivos, por ejemplo:
> > default.py, ciudadanos.py, turnos.py, etc. Todos estos archivos de
> > controladores pertenecerían a la misma aplicación, por lo cual existe un
> > único archivo db.py... Me explico? Creo que eso solucionaría mi problema...
> > Mi duda ahora es: ¿podría esta modalidad traerme problemas de algún tipo?
> > Digo, problemas que no pueda predecir ahora por ser novato :)
>
Pues precisamente eso iba a sugerir, no tener varias apl. sino varios
controladores.
No hay problema si no es mandatoria la separación a nivel aplicativo.
> > Y otra pregunta que me surgió después de razonar: si alguien desea hacer un
> > sitio en web2py que tenga un mínimo de 10 aplicaciones con muchas tablas
> > (digamos, más de 100) todas en la misma base de datos... ¿Cómo construye ese
> > sitio en web2py? ¿Es factible? ¿Tiene que usar plugins? ¿O está obligado a
> > hacer todo en una única aplicación?
>
Buena pregunta, al parecer es necesaria cierta redundancia.
Podemos abrir una consulta en el otro grupo a ver que dice Massimo.
> > Desde ya muchísimas gracias por el soporte, no sólo fue eficiente y puntual,
> > sino que además muy rápido!!
> > Saludos...
>
> > El 23 de febrero de 2010 15:39, Mariano Reingart <reing...@gmail.com>
> > escribió:
>
> >> También se podría encarar más como plugins que como aplicaciones:
>
> >>http://www.web2py.com/plugins
>
> >> Cada plugin es una mini-aplicación, que puede tener su modelo
> >> (definición de base de datos), controladores, etc., y luego se pueden
> >> incorporar a una aplicación más facilmente (y no hace falta importar
> >> el modelo como en django, también se pueden distribuir por separado,
> >> etc.)
>
> >> Sds
> >> Mariano Reingart
> >>http://reingart.blogspot.com
>
> >> 2010/2/23 DenesL <denes1...@yahoo.ca>:
On 23 feb, 10:36, camalotus <rostagnolisan...@gmail.com> wrote:
> Hola a todos, recién acabo de agregarme a este grupo.
> Estoy creando un sitio web en web2py. El mismo cuenta con 3
> aplicaciones, "pyLicencias", "ciudadanos" y "turnos". Para las tres
> aplicaciones, he definido una única base de datos. Todas las
> aplicaciones se conectan a la misma base de datos, hecha en
> postgresql, por lo que incluí la siguiente instrucción: "db =
> DAL('postgres://user:password@localhost/pyLicencias')" en cada archivo
> db.py de cada aplicación. (¿es esto correcto?).
>
> Ahora bien, el modelo de base de datos (todos los db.define_table...)
> están en el archivo db.py de la aplicación inicial, que es
> "pyLicencias". Yo necesito acceder a dicha base de datos desde las
> otras aplicaciones: "turnos" y "ciudadanos".
Yo tengo algo similar y lo resolví con enlaces simbólicos.
Cree varios:
->db.py
->/databases
->/private
->/uploads
y algún otro que no recuerdo.
Te sirve?
Saludos
Jose
vul=DAL('mysql://root:root@localhost/sbdv',pool_size=20)
db = DAL('mysql://root:root@localhost/usbdv',pool_size=20)
Lo importante es volver a definir las tablas con
db.define_table(.....,migrate=False).
¿Es a eso lo que te referís?
Sds
Mariano Reingart
http://reingart.blogspot.com
2010/3/20 kike <eaca...@estudiantes.uci.cu>:
> To unsubscribe from this group, send email to web2py-usuarios+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.
>
Traceback (most recent call last):
File "/home/kike/sbdv/web2py/gluon/restricted.py", line 173, in
restricted
File "/home/kike/Desktop/web2py/applications/SBDV/models/db.py",
line 58, in <module>
Field('second_preference', vul.object_products, label='Preferencia
Secundaria'))
File "/home/kike/sbdv/web2py/gluon/sql.py", line 1270, in
define_table
File "/home/kike//sbdv/web2py/gluon/sql.py", line 1540, in
_create_references
SyntaxError: Table: table "object_vendors" does not exist
y esto fue lo que agregue anteriormente:
vul=DAL('mysql://root:root@localhost/sbdv',pool_size=20)
vul.define_table('object_vendors', migrate=False)
vul.define_table('object_products', migrate=False)
vul.define_table('object_versions', migrate=False)
vul.define_table('object_correlations', migrate=False)
vul.define_table('object_affect_types', migrate=False)
vul.define_table('object_links', migrate=False)
vul.define_table('vulnerabilities', migrate=False)
vul.define_table('credits', migrate=False)
vul.define_table('authors', migrate=False)
vul.define_table('ext_reference_types', migrate=False)
vul.define_table('ext_references', migrate=False)
vul.define_table('classification_types', migrate=False)
vul.define_table('classification_items', migrate=False)
vul.define_table('classifications', migrate=False)
Con eso no deberia ser suficiente???
On Mar 20, 3:12 pm, Mariano Reingart <reing...@gmail.com> wrote:
> Calculo que es igual a la conexión que ya tenés, de tu post en web2py-users:
>
> vul=DAL('mysql://root:root@localhost/sbdv',pool_size=20)
> db = DAL('mysql://root:root@localhost/usbdv',pool_size=20)
>
> Lo importante es volver a definir las tablas con
> db.define_table(.....,migrate=False).
>
> ¿Es a eso lo que te referís?
>
> Sds
>
> Mariano Reingarthttp://reingart.blogspot.com
>
> 2010/3/20 kike <eacarm...@estudiantes.uci.cu>:
Sds
Mariano Reingart
http://reingart.blogspot.com
2010/3/20 kike <eaca...@estudiantes.uci.cu>: