Re: how to get into PG database, is the "url" the right way? newbie question

56 views
Skip to first unread message

Gery

unread,
Aug 14, 2012, 1:05:04 PM8/14/12
to sqlal...@googlegroups.com


any ideas?? basically the idea is how to search inside a database being outside the database, especifically through SqlAlchemy from OpenLayers?


On Monday, August 13, 2012 9:23:43 PM UTC+2, Gery wrote:

Hello, I'm new around here and I've been using SQLalchemy (SA) for a while. I work with PostGis (PG), OpenLayers (OL), ExtJS, GeoExtJS and now with the great SA and GeoAlchemy. I have one problem, I created a model where I defined one table of my PG database, it has a url like this: url = 'postgresql://postgres:password@localhost:5432/pgdb'. In my HTML, I have some maps displayed with OL and a toolbar built with ExtJS and GeoExtJS. I put a search button there using ExtJS, and the OL protocol code to get the data. This protocol has an url option, in this way:

 var searchformPanel = new Ext.form.FormPanel(
        {
                width: 250,
                bodyStyle: 'padding:5px',
                labelAlign: 'top',
                defaults:
                {
                        anchor: '100%'
                },
                protocol: new OpenLayers.Protocol.HTTP(
                {
                        url: 'http://localhost/mop/py/dbmodel.py',
                        format: new OpenLayers.Format.GeoJSON()
                }
                ),
                items:
                etc,etc......

my problem is that in this url I wrote the whole path where my model script is located, but after pressing the button I got nothing. I think I need something else rather than only pointing the whole path and the python script in the url mentioned above, is that correct? I've searched "how to connect sqlalchemy to extjs" in google but didn't find any that solved this doubt.

Any support is very welcome, thanks in advance.

Best regards,

Gery

Simon King

unread,
Aug 14, 2012, 1:23:28 PM8/14/12
to sqlal...@googlegroups.com
I'm probably missing something here, but are you running any kind of
web framework? What happens when you visit
http://localhost/mop/py/dbmodel.py in your web browser?

You need something running on the server which accepts HTTP requests
and responds with whatever data OpenLayers is expecting. There are
plenty of web frameworks to choose from
(http://wiki.python.org/moin/WebFrameworks/) - I happen to like
Pyramid, but you may want to start with something smaller such as
Flask.

Hope that helps,

Simon

Gery

unread,
Aug 14, 2012, 1:39:18 PM8/14/12
to sqlal...@googlegroups.com


Hello Simon,

Thanks for your answer, acttually I don't use any web framework, I just did a html page and put Openlayers, GeoExt, and Ext code there. To display points/lines/polylines/rasters/etc., I use Mapserver, so I connect my PostGis database with OpenLayers. After putting the http://localhost/mop/py/dbmodel.py link, I get the whole model (I think this should be my model, is it right?), so the Apache works well =):

#created: 30 July 2012
#updated: 12 August 2012
#Gery

from sqlalchemy import *
from sqlachemy import create_engine, MetaData, Table
from sqlalchemy.orm import *
from sqlalchemy.orm import mapper, relation, backref, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# Setup the url, database engine and session
url = 'postgresql://postgres:password@localhost:5432/mop'
engine = create_engine(url, echo=True)
session = sessionmaker(bind=engine)
session = Session()

# Setup the declarative extension and metadata
Base = declarative_base(metadata=metadata)
metadata = MetaData(engine)

# Define the model classes
class Boreholes(Base):
	__tablename__ = 'boreholes_point_wgs84'
	__table_args__ = {'autoload':True}

# DDL Extensions for geometry specific DDL
GeometryDDL(Boreholes.__table__)

Do I really need a web framework? I know some people use GeoAlchemy and SqlAlchemy with Pylons, but I don't want to use that, well in general any web framework. What could it be that "something" you mentioned that I need? I've been reading that with PHP I can make the connection to do the HTTP requests/responds, am I right? is this the unique way or solution to do this?

Thanks again

Simon King

unread,
Aug 14, 2012, 2:14:36 PM8/14/12
to sqlal...@googlegroups.com
Hi Gery,

At the moment, your javascript code (running in your web browser) is
making an HTTP request to Apache. Apache is simply returning the
contents of the requested file, so your javascript is receiving a
string of Python code that it has no way of interpreting. I'm afraid
this will never work.

What you need is for Apache to *execute* the python script and return
the contents to your browser. There are lots of ways of doing this,
but you'll really need to at least have a basic understanding of web
technologies. You will have to understand how OpenLayers requests data
from the server, know how to extract query parameters from the
request, turn those into a database query, format the results as JSON
and return them back to the browser. I'm afraid all of those things
are outside the scope of this list.

Sorry I can't be more help,

Simon

Gery .

unread,
Aug 14, 2012, 2:52:06 PM8/14/12
to sqlal...@googlegroups.com

Many thanks Simon, very cool explanation, I'm grateful for your neat support. I'll look for that in google and OpenLayers, about to execute the python script and Apache, I think it has something to do with modwsgi but not sure. If you could point me to some useful links for any of the ways (perahps the easiest one) of doing this, I'd be really grateful, but you already helped me a lot, thanks man.

Cheers,

Gery


>
> Hi Gery,
>
> At the moment, your javascript code (running in your web browser) is
> making an HTTP request to Apache. Apache is simply returning the
> contents of the requested file, so your javascript is receiving a
> string of Python code that it has no way of interpreting. I'm afraid
> this will never work.
>
> What you need is for Apache to *execute* the python script and return
> the contents to your browser. There are lots of ways of doing this,
> but you'll really need to at least have a basic understanding of web
> technologies. You will have to understand how OpenLayers requests data
> from the server, know how to extract query parameters from the
> request, turn those into a database query, format the results as JSON
> and return them back to the browser. I'm afraid all of those things
> are outside the scope of this list.
>
> Sorry I can't be more help,
>
> Simon
>
> --
> You received this message because you are subscribed to the Google Groups "sqlalchemy" group.
> To post to this group, send email to sqlal...@googlegroups.com.
> To unsubscribe from this group, send email to sqlalchemy+...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
>

Gery .

unread,
Aug 17, 2012, 5:50:21 PM8/17/12
to sqlal...@googlegroups.com, si...@simonking.org.uk


Thanks Simon again for your nice explanation, I finally found a way to do that, thanks.

Cheers,

Gery








__________________________________________________________________________________________
Piensa en el medio ambiente - mantenlo en la pantalla. NO lo imprimas si NO es necesario.

Think green - keep it on the screen. Do NOT print if it is NOT necessary.
Denken Sie an die Umwelt - bewahren Sie es auf dem Bildschirm. Drucken Sie NICHT, wenn es NICHT notwendig ist.


Martijn Moeling

unread,
Aug 17, 2012, 8:24:02 PM8/17/12
to sqlal...@googlegroups.com
I have made this for my project and I do not see why you are using Openlayers for this.
This has nothing to do with sqlalchemy. 


off topic: Ext.form.Panel has no 'protocol' so I think you should extend FormPanel to include that functionality. Ext.direct is the way to go for stuff like this.



--
You received this message because you are subscribed to the Google Groups "sqlalchemy" group.
To view this discussion on the web visit https://groups.google.com/d/msg/sqlalchemy/-/06H8WaCTV7cJ.

Martijn Moeling

unread,
Aug 17, 2012, 8:36:16 PM8/17/12
to sqlal...@googlegroups.com
or take a look at this:

var store = new GeoExt.data.FeatureStore({
    layer: sundials,
    proxy: new GeoExt.data.ProtocolProxy({
        protocol: new OpenLayers.Protocol.HTTP({
            url: "sundials.kml",
            format: new OpenLayers.Format.KML()
        })
    }),
    fields: [
        {name: 'title', type: 'string'},
        {name: 'description', type: 'string'}
    ],
    autoLoad: true
});

which looks way different than your code….


use mod_python (better not)
use mod_wsgi (Good!)
use CGI of FastCGI (not that good)

GeoExt uses ext 3.3 which is a hazzard in its own rights since 4.x is so much better (consistant) , faster and more stable, I guess GeoExt is over a year behind reality. If you use that try if you can wait for GeoExt2

Gery .

unread,
Aug 18, 2012, 6:04:08 AM8/18/12
to sqlal...@googlegroups.com

Thanks Martijn for your help, I understand that it doesn't really matter which technology someone uses on server side to deliver the data, so I can use SA or  GeoSA to do this, is it correct? I also think that it only depends of what software someone is already using, well in my case OL, GeoExt, Ext, PG, is this right? So, as long as the data returned by the server side service is formatted as geojson (because point/line/polygon/etc... are stored in my PG db), I can use that data in the javascript in my web interface. I don't understand well your code, but it should reflect the above info. I've read that SA/GeoSA is difficult to understand at the beginning, but it's worth to learn because it can be a very strong toolkit to develop future projects. Well you're right about the tools, I'm  using mod_wsgi after reading several things in internet, also the python DB API driver and now I can connect my PG tables with python, but so far I don't understand how to link this with OL protocol or GeoExt url.

Thanks again for you answer and I'd be cool to have some further ideas about this.

Cheers,

Gery








__________________________________________________________________________________________
Piensa en el medio ambiente - mantenlo en la pantalla. NO lo imprimas si NO es necesario.

Think green - keep it on the screen. Do NOT print if it is NOT necessary.
Denken Sie an die Umwelt - bewahren Sie es auf dem Bildschirm. Drucken Sie NICHT, wenn es NICHT notwendig ist.



From: mar...@xs4us.nu
Subject: Re: [sqlalchemy] how to get into PG database, is the "url" the right way? newbie question
Date: Sat, 18 Aug 2012 02:36:16 +0200
To: sqlal...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages