2009-11-22 135 views
1

如何將下列代碼轉換爲Python的ORM,例如SQLalchemy?將SQL命令轉換爲Python的ORM

#1把數據到PG

import os, pg, sys, re, psycopg2              

#conn = psycopg2.connect("dbname='tkk' host='localhost' port='5432' user='noa' password='123'") 

conn = psycopg2.connect("dbname=tk user=naa password=123") 
cur = conn.cursor() 
cur.execute("""INSERT INTO courses (course_nro) 
      VALUES (%(course_nro)s)""", dict(course_nro='abcd')) 
conn.commit() 

#2擷取

cur.execute("SELECT * FROM courses") 
print cur.fetchall() 

大約兩個命令的實例在SQLalchemy

插入

sqlalchemy.sql.expression.insert(table, values=None, inline=False, **kwargs) 

選擇

sqlalchemy.sql.expression.select(columns=None, whereclause=None, from_obj=[], **kwargs) 
+0

當你閱讀SQLAlchemy的網站,你們給插入,然後選擇什麼樣的例子。請更新此問題以包含來自SQLAlchemy網站的示例代碼。 – 2009-11-22 17:40:58

+0

所以,你有SQLAlchemy的代碼。什麼 - 具體 - 你問?你有代碼。你有什麼問題? – 2009-11-22 22:51:14

回答

1

最初的聲明之後,你可以做這樣的事情:

o = Course(course_nro='abcd') 
session.add(o) 
session.commit() 

print session.query(Course).all() 

的聲明可能會是這個樣子:

from sqlalchemy import * 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import session_maker 

# create an engine, and a base class 
engine = create_engine('postgre://naa:[email protected]/tk') 
DeclarativeBase = declarative_base(bind=engine) 
metadata = DeclarativeBase.metadata 

# create a session 
Session = session_maker(engine) 
session = Session() 

# declare the models 
class Cource(DelcarativeBase): 
    __tablename__ = 'courses' 

    course_nro = Column('course_nro', CHAR(12)) 

此聲明性方法只是使用sqlalchemy的一種方法。

0

即使這是舊的,更多的例子不能傷害,對吧?我想我會演示如何用PyORMish來做到這一點。

from pyormish import Model 

class Course(Model): 
    _TABLE_NAME = 'courses' 
    _PRIMARY_FIELD = 'id' # or whatever your primary field is 
    _SELECT_FIELDS = ('id','course_nro') 
    _COMMIT_FIELDS = ('course_nro',) 

Model.db_config = dict(
    DB_TYPE='postgres', 
    DB_CONN_STRING='postgre://naa:[email protected]/tk' 
) 

要創建:

new_course = Course().create(course_nro='abcd') 

選擇:

# return the first row WHERE course_nro='abcd' 
new_course = Course().get_by_fields(course_nro='abcd')