相关疑难解决方法(0)

在SQLAlchemy中将类映射到多个表

# ! /usr/bin/env python
# -*- coding: utf-8 -*-
# login_frontend.py

""" Python        2.7.3
    Cherrypy      3.2.2
    PostgreSQL    9.1
    psycopy2      2.4.5
    SQLAlchemy    0.7.10
"""
Run Code Online (Sandbox Code Playgroud)

我在一个Python/SQLAlchemy类中连接四个表时遇到问题.我正在尝试这个,所以我可以迭代这个类的实例,而不是我从连接ORM表中得到的命名元组.

为什么这一切?因为我已经开始这样了,而且我走得太远,只是离开它.此外,它必须是可能的,所以我想知道它是如何完成的.

对于这个项目(cherrypy web-frontend),我得到了一个已经完成的包含表类的模块.我把它移到了这篇文章的底部,因为也许你甚至都不需要它.

以下只是联接多表类尝试的一个示例.我选择了一个简单的案例,其中只有两个表和一个联结表.在这里,我不会写入这些连接表,但它在其他地方是必要的.这就是为什么类可以很好地解决这个问题.


我尝试加入课程,

这是给定的表类模块和这两个网站的示例的组合:

- 针对多个表映射类
- SQLAlchemy:一个类 - 两个表

class JoinUserGroupPerson (Base):

    persons = md.tables['persons']
    users = md.tables['users']
    user_groups = md.tables['user_groups']
    groups = md.tables['groups']

    user_group_person =(
        join(persons, users, persons.c.id == users.c.id).
        join(user_groups, users.c.id == user_groups.c.user_id).
        join(groups, groups.c.id == user_groups.c.group_id))

    __table__ = user_group_person

    """ I expanded the redefinition of 'id' to three tables,
        and …
Run Code Online (Sandbox Code Playgroud)

python mapping orm sqlalchemy cherrypy

38
推荐指数
1
解决办法
3604
查看次数

sqlalchemy使用ORM创建VIEW

我创建了以下ORM:

from sqlalchemy import Column, Integer, String, UniqueConstraint
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()


class TableA(Base):
    __tablename__ = 'table_a'

    id = Column(Integer, primary_key=True, nullable=False)
    identifier = Column(String(320))
    internal_id = Column(Integer)
    type = Column(String(32))
    time = Column(DateTime(timezone=True))
    success = Column(Boolean())
    parameters = Column(JSONB())



class TableB(Base):
    __tablename__ = 'table_b'
    __table_args__ = (UniqueConstraint('generate_action',
                                       'print_action',
                                        name='my_action_key'),)

    id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
    generate_action = Column(Integer)
    print_action = Column(Integer)
    generate_action = Column(Integer)
    coupon_code = Column(String(300))
    number_of_rebought_items = Column(Integer)
    seconds_between_rebuy = …
Run Code Online (Sandbox Code Playgroud)

python postgresql orm sqlalchemy view

12
推荐指数
1
解决办法
2662
查看次数

是否可以使用SqlAlchemy中的mapper与类映射视图?

正如我在这里提到的,我创建了View.

是否可以创建用于会话的视图类?

v = Table('viewname', metadata, autoload=True)

class ViewName(object):
    def __init__(self, name):
       self.name = name

mapper(ViewName, v)
Run Code Online (Sandbox Code Playgroud)

python orm sqlalchemy python-2.7

9
推荐指数
2
解决办法
8324
查看次数

使用sqlalchemy orm从查询创建临时表

我可以这样创建一个临时表:

session.execute("CREATE TABLE temptable SELECT existingtable.id, "
    "existingtable.column2 FROM existingtable WHERE existingtable.id<100000")
Run Code Online (Sandbox Code Playgroud)

但新表格不可读,因为它表示它没有主键. existingtable.id是exisitingtable的主要关键,所以我期望它在临时表中获得相同的处理.

但是,我宁愿找到一些ORM方式来做到这一点.鉴于:

temp_table = Table('temptable', metadata, 
    Column('id', Integer, primary_key=True),
    Column('column2', Integer),
    useexisting=True )
class TempTable(object):
    pass
mapper(TempTable, temp_table)
temp_table.create(bind=session.bind, checkfirst=True)
if session.query(TempTable).delete(): #make sure it's empty
    session.commit()
Run Code Online (Sandbox Code Playgroud)

如何temp_table在existingtable不执行100000 session.query.add(TempTable(...))命令的情况下填充一些选定的内容?或者有没有办法从类似上面的纯SQL版本的查询创建表?

python sql sqlalchemy

8
推荐指数
1
解决办法
1万
查看次数

如何根据Graphene/Django上的用户类型限制模型上的字段访问?

假设我有一个模型:

class Employee(models.Model):
    first_name = models.CharField(max_length=40)
    last_name = models.CharField(max_length=60)
    salary = models.DecimalField(decimal_places=2)
Run Code Online (Sandbox Code Playgroud)

我希望任何人都能够访问first_name和last_name但只希望某些用户能够读取工资,因为这是机密数据.

然后我想限制工资的写/更新给一个甚至不同类型的用户.

如何根据请求用户限制字​​段读/写/更新?

编辑:

这是在GraphQL API上下文中.我正在使用石墨烯.我想在解析器功能中看到可扩展的解决方案.

python django graphene-python

8
推荐指数
1
解决办法
1678
查看次数

SQLalchemy - 来自查询的模型

我们有一个sqlalchemy用作 ORM的应用程序。除了映射表,我们还用它来映射现有的数据库视图,效果很好。

但是,我们找不到将自定义查询映射到模型的简单方法。例如,假设我们有一个像这样的报告:

q = session.query(
    Table1.field1, Table2.field2, func.sum(Table2.field3).label('sum')
).join(
    Table2, Table1.id == Table2.id
).filter(
    Table1.field1 == param1, Table1.field2 == param2
).group_by(
    Table1.field1, Table2.field2
) 
Run Code Online (Sandbox Code Playgroud)

我们想将此查询映射到一个类

class Report(CustomBaseModel):

    field1 = Column(Integer, primary_key=True)
    field2 = Column(Integer, primary_key=True)
    sum = Column(Numeric)
Run Code Online (Sandbox Code Playgroud)

我们CustomBaseModel已经实现了很多功能,因此能够在这里使用它会减少代码重复。例如,以这种方式使用声明性基将可以将relationships定义为其他表。

当然这个例子不起作用,因为"report"数据库中没有selectable 。

我尝试__table__ = q.subquery()在Report课堂上进行设置。通过这种方式,查询可以工作,但无法定义列、关系或其他属性。也许有更好的方法来实现这一目标。

python sqlalchemy flask-sqlalchemy

5
推荐指数
1
解决办法
1521
查看次数