• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

magician

SQLObject ou Storm

7 mensagens neste tópico

Boas tenho andado a investigar sobre ORM para Python, sugiram estes dois nomes.

Pelo que já vi ambos fazem bem o trabalho proposto, embora de formas diferentes, preciso de um ORM mas não sei qual dos 2 escolher lol é tudo muito mais simples quando só tempos uma opção valida xD

Qual aconselham ?? Não consegui encontrar nada mas alguém sabe se o Storm funciona em windows?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim ORM Object-Relational Mapping. Ho tou a ver que é tudo faz do SQL on code xD lol Tou na duvida entre estes 2 :S Já vi outros mas sempre acabo por optar por estes agora não sei é qual :\

Tou a ver que depois de optar por um dele tenho de fazer um artigo sobre ORM lol não sabem o que andam a perder lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como só uso PHP para mexer em BDs, não sei como está o Python nesse campo. Mas uma olhada rápida na wikipedia fez-me luzir o olho ao SQLAlchemy e ao SQLObject, não achei grande piada ao Storm da Canonical...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu uso o DAL (data abstraction layer) do web2py e é bem porreiro, mas fora do contexto da framework é demasiado overkill. Aquilo vem com funcionalidades como validadores que dão conta de entre outras coisas da validação de formulários.

Os objectos criados, para o caso de um pedido têm esse nome SQLObject mas as semelhanças acabam aí.

O DAL do web2py define um modelo de dados no verdadeiro sentido da expressão. Nem precisas de te lembrar que usas uma base de dados, basta-te apenas usar os tipos de dados criados por ti no teu modelo.

O SQLObject, por outro lado, acaba por ser uma implementação de uma syntaxe diferente em que as operações que farias na base de dados são mapeadas em métodos de classes.

E isto levanta uma questão que é: qual a utilidade de um ORM por si só? Se for só para uma implementação de uma sintaxe tipo active record então pessoalmente não aconselho pelo simples motivo de não ser preciso para praticamente nada para alem da compatibilidade com diferentes SGBDs.

Os ORMs que aí andam pecam por gula, querem ser demasiado genéricos e depois acabam por não ter grande utilidade.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como só uso PHP para mexer em BDs, não sei como está o Python nesse campo. Mas uma olhada rápida na wikipedia fez-me luzir o olho ao SQLAlchemy e ao SQLObject, não achei grande piada ao Storm da Canonical...

O SQLAlchemy nha me agradou, dá muitas voltas para fazer algo simples o que me agradou no storm é a possibilidade de poder modelar os campos mais como queremos ao contrário do SQLObject que cria as tabelas sozinho conforme as variaveis que colocas na classe. Por acaso estou a pender mais para o Storm lol mas o SQLObject também me parece muito bem lol ai ai isto já parece o Java com Hibernate e TopLink xD

E isto levanta uma questão que é: qual a utilidade de um ORM por si só? Se for só para uma implementação de uma sintaxe tipo active record então pessoalmente não aconselho pelo simples motivo de não ser preciso para praticamente nada para alem da compatibilidade com diferentes SGBDs.

Os ORMs que aí andam pecam por gula, querem ser demasiado genéricos e depois acabam por não ter grande utilidade.

A grande utilidade dos ORM's é teres abstraires-te da BD, podes usar qq BD sem ter de mudar código apenas mudar a connect que depois o ORM faz o resto, conversão de tipos, tags etc... Para além disso não tens de criar código SQL dentro do teu programa. Para além disso é muito produtivo, na altura que comecei a usar ORM deparei-me com este exemplo

import java.sql.*;

public class JDBCCode {

    private static Connection con = null;

    /** Creates a new instance of JDBCCode */

    public JDBCCode() {

    }

   

    public static Connection open(){

        String user = "user";

        String pass = "*****";

        String url  = "jdbc:mysql://localhost/bug";

        try{

            Class.forName("com.mysql.jdbc.Driver");

            con = DriverManager.getConnection(url,user,pass);

        }catch( Exception e ){

            e.printStackTrace();

        }

        return con;

    }

   

    public static void main( String args[] ) throws Exception{

        String sql = "SELECT * FROM bug";

        con = open();

        try {

            Statement st= con.createStatement();

            ResultSet rs= st.executeQuery(sql);

            while( rs.next() ){

                System.out.println("Titulo: "+ rs.getString("titulo"));

            }

        } catch (SQLException ex) {

            ex.printStackTrace();

        }finally{

            con.close();

        }

    }

}

Face a um com ORM

public Object findByPk( int pKey ) {

        EntityManager em = getEntityManager();

        return em.find(Bug.class, pKey);

}

Obvio que o com ORM não é só isso isto é o método para seleccionar determinado registo mas tirando a construção da classe o trabalho é pouco mais e no caso do Java com os IDE's essas classes até podem ser feitas automaticamente a partir das tabelas criadas na BD xD

Tenho fugido bastante de ORM e usado padrões como DAO mas depois de pesquisar bem a produtividade com ORM é muito maior e oferece ao programador a opção de se livrar do SQL ou caso queira mesmo faze-lo então é só fazer aquilo que quer á parte e pronto :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu pessoalmente prefiro o SQLObject por uma simples razão TurboGears usa esse modulo o que facilita a vida usar para "todos" os propósitos o mesmo modulo!

É uma questão a ter em conta se pensares mais tarde desenvolver algo para net já estas familiarizado com o ORM utilizado pela framework!(isto esta claro se no preferires django)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora