将SQL命令转换为Python的ORM

1 投票
2 回答
774 浏览
提问于 2025-04-15 16:15

你如何将以下代码转换为Python的ORM,比如使用SQLalchemy?

#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)

2 个回答

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:123@localhost/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')
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:123@localhost/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的一种方式。

撰写回答