将SQL命令转换为Python的ORM
问题描述:
如何将下列代码转换为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)
答
最初的声明之后,你可以做这样的事情:
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的一种方法。
答
即使这是旧的,更多的例子不能伤害,对吧?我想我会演示如何用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')
当你阅读SQLAlchemy的网站,你们给插入,然后选择什么样的例子。请更新此问题以包含来自SQLAlchemy网站的示例代码。 – 2009-11-22 17:40:58
所以,你有SQLAlchemy的代码。什么 - 具体 - 你问?你有代码。你有什么问题? – 2009-11-22 22:51:14