标签: sqlalchemy

sqlalchemy一对多关系,其中相同的外键在模型中使用两次

我有一个像这样的简单模型

class ChatMessage(Base):
    __tablename__ = 'chat_messages'
   id = Column(Integer, ForeignKey('messages.id'))
   sender_id = Column(Integer, ForeignKey('users.id'))
   receiver_id = Column(Integer, ForeignKey('users.id'))
Run Code Online (Sandbox Code Playgroud)

我尝试向用户添加消息关系.

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String, nullable=False)
    chat_messages = relationship("ChatMessage", backref="participants",
                             foreign_keys="[ChatMessage.sender_id, ChatMessage.receiver_id]")
Run Code Online (Sandbox Code Playgroud)

它给:

InvalidRequestError:一个或多个映射器无法初始化 - 无法继续初始化其他映射器.原始异常是:无法确定关系User.chat_messages上的父/子表之间的连接条件 - 有多个链接表的外键路径.指定'foreign_keys'参数,提供应列为包含对父表的外键引用的列的列表.

python sqlalchemy

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

SQLAlchemy - 创建无符号BigInteger的正确方法

我现在收到一个警告,BigInteger即不推荐传递参数.但是,我不确定是否有任何其他方法将值声明为unsigned.我正在存储MySQL uuid_short()函数的结果,这是一个无符号的64位整数,如果未将该列声明为,则可能会导致溢出UNSIGNED.

现在处理这个问题的正确方法是什么?

python mysql sqlalchemy

1
推荐指数
2
解决办法
2599
查看次数

SQLALchemy自定义整数排序顺序

我有一个表,其中有一列整数表示type行.这些整数的范围是1 - 5.如何在SQLAlchemy中指定自定义排序顺序,例如,如果我希望按以下顺序排序行[4, 2, 3, 5, 1]

我知道Enum数据类型,但它映射到数据库后端的VARCHAR,并且不能更改架构.

python sqlalchemy

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

金字塔中的多个数据库

首先,我是Python的新手.

现在已经不在了.我正在尝试访问2个不同数据库上的数据并在一个视图上显示信息.

http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/pylons/models.html#multiple-databases

这个^在第一段之后似乎不完整.我有第一个数据库工作和完成,它工作得很好.现在我正在尝试合并第二个数据库.

如果我有第二个数据库,我无法找到我的development.ini文件应该是什么样子.我有这个:

sqlalchemy.url = mssql+pyodbc://[databasestuffsredacted]
Run Code Online (Sandbox Code Playgroud)

我想到了类似的东西

db2 = mssql+pyodbc://[seconddbstuffsredacted]
Run Code Online (Sandbox Code Playgroud)

(两个数据库使用相同的类型和驱动程序)从先前的堆栈溢出问题,这被提到:

DBSession2 = orm.scoped_session(orm.sessionmaker(extension=ZTE())
Run Code Online (Sandbox Code Playgroud)

但是,世界上如何与我的第二个数据库进行对话.我错过了一个关键的部分,我认为应该在第一段之后的上述文件中.

python sqlalchemy pyramid

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

如何使用pgcrypt在SQLAlchemy中实现列级PostgresSQL加密?

例如,在Django中有一个repo:https://sourcegraph.com/github.com/dcwatson/django-pgcrypto.

SQLAlchemy手册中有一些讨论,但我使用的是非字节列:http://docs.sqlalchemy.org/en/rel_0_9/core/types.html

我正在使用SQLAlchemy在Heroku上运行Flask.

一个代码示例和/或一些讨论将是最受欢迎的.

postgresql sqlalchemy heroku pgcrypto

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

直接查询关联表对象

我必须直接查询关系,因为我必须单独显示它们.

task_user = db.Table(
    'pimpy_task_user',
    db.Column('task_id', db.Integer, db.ForeignKey('pimpy_task.id')),
    db.Column('user_id', db.Integer, db.ForeignKey('user.id'))
)
Run Code Online (Sandbox Code Playgroud)

我如何在SQLAlchemy中执行此操作?当我尝试这个:

tasks_rel = task_user.join(Task).join(User).filter(Task.group_id == group_id)
Run Code Online (Sandbox Code Playgroud)

它会导致此错误:

AttributeError: 'Join' object has no attribute 'filter'
Run Code Online (Sandbox Code Playgroud)

python sql sqlalchemy

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

SQLAlchemy,急切加载postgresql INET/CIDR关系

我在postgresql中有两个表,一个名为ip_address,另一个名为network.

ip_address表有两列:

  1. id 是一个 INTEGER
  2. v4address 是一个 INET

network表有两列:

  1. id 是一个 INTEGER
  2. v4representation 是一个 CIDR

我希望能够选择ip_address并急切加载ip_addresses network(s),而无需id在表之间定义基于外键的关系.这些id列由与其他表无关的其他关系使用.

完成此任务的SQL是:

select * from ip_address join network on ip_address.v4address << network.v4representation;
Run Code Online (Sandbox Code Playgroud)

在postgresql中,<<运算符可用于比较a INET和a CIDR.它将匹配INET包含在其中的行CIDR.

我可以property在我的IPAddress模型上定义一个可以完成此任务的模型:

@property
def networks(self):
    query = session.query(Network)
    query = query.filter("v4representation >> :v4addr").params(v4addr=self.v4address)
    return query.all()
Run Code Online (Sandbox Code Playgroud)

这有效,但是当我真正尝试property在应用程序中使用它时,我遇到了典型的"N + 1"查询问题.我想以这样的方式定义它,以便能够急于加载IP地址网络.

我试图将其定义为relationship …

python postgresql sqlalchemy

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

为什么SQLAlchemy执行Update不起作用

我有以下内容:

@periodic_task(run_every=crontab(minute="*/1"))
def PeriodicUpdateAgentLastRica():
    query = """update agents
            inner join
               (select sims.consignment_agents_id as agents_id,
                MAX(sims.rica_current_stamp) 
            as last_rica_stamp
            from sims
            where sims.rica_current_stamp > DATE_SUB(now(), INTERVAL 3 MONTH) and sims.consignment_agents_id is not NULL
            group by sims.consignment_agents_id) as dt on dt.agents_id = agents.id
            set agents.last_rica_stamp = dt.last_rica_stamp"""
    res = Session.execute(query)
    print res
    if res.rowcount:
        log.info("Updated %s agents" % res.rowcount)
    #transaction.commit()
Run Code Online (Sandbox Code Playgroud)

当我运行时celery worker -B这是返回的内容:

[2014-02-12 09:15:00,012: INFO/MainProcess] Received task: prepaid.models.Prepaid.PeriodicUpdateAgentLastRica[9ca091c8-595f-4163-8ddf-2742e573b90c]
[2014-02-12 09:15:01,812: WARNING/Worker-7] <sqlalchemy.engine.result.ResultProxy object at 0x776f310>
[2014-02-12 09:15:01,813: INFO/Worker-7] Updated 2923 …
Run Code Online (Sandbox Code Playgroud)

python mysql transactions sqlalchemy pyramid

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

Flask SqlAlchemy 2表连接:如何检索具有两个对象的行

我有以下加入:

user = User.query.join(UserEmail).filter_by(address = js['email'].lower()).first()
Run Code Online (Sandbox Code Playgroud)

它有效,但我也想在结果行中使用UserEmail

我怎么做到这一点?

python join sqlalchemy flask

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

基于Mixin列的SQLalchemy连接继承查询

我有一个声明性的类结构,如下所示:

class BaseClass(Base):
      Column A
      Column B

class Mixin(object):
      Column C

class ItemA(BaseClass):
      Column D

class ItemB(Mixin, BaseClass):
      pass

class ItemC(Mixin, BaseClass):
      Column E
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以with_polymorphic使我基于Column C所有对象进行查询Items,而不必明确知道自己Item拥有什么?本质上有点像

mixin_poly = with_polymorphic(base = BaseClass, classes = MixinClass.__subclasses__())
Run Code Online (Sandbox Code Playgroud)

假设在导入时,在声明MixinClass之前,所有的导数都已导入with_polymorphic

编辑 注意,我已经省略了连接表继承的样板,但是假设它已经正确设置,可以执行

poly_base = with_polymorphic(base = BaseClass, classes = '*')
session.query(poly_base).filter(BaseClass.a == value, ...)
Run Code Online (Sandbox Code Playgroud)

执行预期的查询列BaseClass。关键是能够查询Mixin以相同方式继承该类的子类中的公共列。

python orm sqlalchemy

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

标签 统计

sqlalchemy ×10

python ×9

mysql ×2

postgresql ×2

pyramid ×2

flask ×1

heroku ×1

join ×1

orm ×1

pgcrypto ×1

sql ×1

transactions ×1