小编Ilj*_*ilä的帖子

SQLAlchemy将多个外键在一个映射类中转换为相同的主键

我试图设置一个postgresql表,它有两个指向另一个表中相同主键的外键.

当我运行脚本时,我收到错误

sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系Company.stakeholder上的父/子表之间的连接条件 - 有多个链接表的外键路径.指定'foreign_keys'参数,提供应列为包含对父表的外键引用的列的列表.

这是SQLAlchemy文档中的确切错误,但当我复制它们提供的解决方案时,错误不会消失.我能做错什么?

#The business case here is that a company can be a stakeholder in another company.
class Company(Base):
    __tablename__ = 'company'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)

class Stakeholder(Base):
    __tablename__ = 'stakeholder'
    id = Column(Integer, primary_key=True)
    company_id = Column(Integer, ForeignKey('company.id'), nullable=False)
    stakeholder_id = Column(Integer, ForeignKey('company.id'), nullable=False)
    company = relationship("Company", foreign_keys='company_id')
    stakeholder = relationship("Company", foreign_keys='stakeholder_id')
Run Code Online (Sandbox Code Playgroud)

我在这里看到过类似的问题,但有些答案建议人们primaryjoin在文档中使用a 表明你primaryjoin在这种情况下不需要.

python postgresql sqlalchemy

37
推荐指数
2
解决办法
3万
查看次数

SQLAlchemy计算列

(新的SQLAlchemy用户警报)我有三个表:一个人,从特定日期开始的人每小时费率和每日时间报告.我正在寻找正确的方法,以便在当天的人员每小时费率中扣除时间费用.

是的,我可以在创建时计算该值,并将其作为模型的一部分,但请将此视为总结幕后更复杂数据的示例.我如何计算Time.cost?它是hybrid_propery,column_property还是完全不同的东西?

class Person(Base):
    __tablename__ = 'person'
    personID = Column(Integer, primary_key=True)
    name = Column(String(30), unique=True)

class Payrate(Base):
    __tablename__ = 'payrate'
    payrateID = Column(Integer, primary_key=True)
    personID  = Column(Integer, ForeignKey('person.personID'))
    hourly    = Column(Integer)
    starting  = Column(Date)
    __tableargs__ =(UniqueConstraint('personID', 'starting',
                                     name='uc_peron_starting'))

class Time(Base):
    __tablename__ = 'entry'
    entryID  = Column(Integer, primary_key=True)
    personID = Column(Integer, ForeignKey('person.personID'))
    workedon = Column(Date)
    hours    = Column(Integer)

    person = relationship("Person")

    def __repr__(self):
        return "<{date} {hours}hrs ${0.cost:.02f}>".format(self, 
                      date=self.workedon.isoformat(), hours=to_hours(self.hours))

    @property
    def cost(self):
        '''Cost of entry
        '''
        ## This is where I …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy calculated-columns

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

如何在sql炼金术过滤器中从字符串变量动态地给出列名?

我想在sql炼金术过滤器中创建查询,但是在变量/变量中指定的列是(动态的).

原始查询:

db_session.query(Notice).filter(Notice.subject.like("%" +query+ "%"))
Run Code Online (Sandbox Code Playgroud)

我想做这样的查询:

col_name='subject'
db_session.query(Notice).filter(Notice.col_name.like("%" +query+ "%"))
col_name='status'
status=0
db_session.query(Notice).filter(Notice.col_name != 1)
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

30
推荐指数
2
解决办法
2万
查看次数

用于深度克隆对象的Object.assign和JSON.parse(JSON.stringify(obj))有什么区别?

我想知道它们之间是否有区别

Object.assign({}, obj)
Run Code Online (Sandbox Code Playgroud)

JSON.parse(JSON.stringify(obj))
Run Code Online (Sandbox Code Playgroud)

用于深度克隆对象?任何人都可以解释他们是否有任何想法?

javascript javascript-objects

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

sqlalchemy ORM:如何声明包含多列主键的表类?

主键的列必须按特定顺序排列.

我从文档中看到一些代码:

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer)

    __mapper_args__ = {
        'primary_key':[id]
    }
Run Code Online (Sandbox Code Playgroud)

但它只是不起作用(我使用的是mysql,并且不会生成id主键).任何可能的解决方

python sqlalchemy

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

使用ORM时的情况(SQLalchemy)

我正在使用SQLAlchemy和ORM paragdim.我无法找到一种方法来执行CASE WHEN指令.我在网上找不到这方面的信息.

可能吗 ?

python orm sqlalchemy

27
推荐指数
2
解决办法
2万
查看次数

AttributeError:使用flask-sqlalchemy连接到sqlite数据库时无法设置属性

我一直在学习 Flask Web 应用程序框架并且对它感到很舒服。我以前构建了一个简单易用的应用程序,它运行良好。我在同一个项目上工作,但尝试使用 TDD 来实现它。我遇到了以前从未见过的数据库错误,不知道如何修复。

当我检查我的代码时,我看不出任何问题。它看起来也与工作项目的代码相同,所以我真的不知道我做错了什么。

这是错误:

(env) PS C:\coding-projects\task-master-tdd> flask shell
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:43:08) [MSC v.1926 32 bit (Intel)] on win32
App: project [development]
Instance: C:\coding-projects\task-master-tdd\instance
>>> from project import db
>>> db
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "c:\coding-projects\task-master-tdd\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 1060, in __repr__
    self.engine.url if self.app or current_app else None
  File "c:\coding-projects\task-master-tdd\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 943, in engine
    return self.get_engine()
  File "c:\coding-projects\task-master-tdd\env\lib\site-packages\flask_sqlalchemy\__init__.py", line 962, in get_engine
    return connector.get_engine()
  File …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

27
推荐指数
2
解决办法
4906
查看次数

如何将列表绑定到sqlalchemy中自定义查询中的参数?

我出于性能原因使用这个sql

 sql_tmpl = """delete from Data where id_data in (:iddata) """
 params = {  
                    'iddata':[1, 2,3 4],
                    }
 # session is a session object from   sqlalchemy
 self.session.execute(text(sql_tmpl), params)     
Run Code Online (Sandbox Code Playgroud)

但是我得到了一个例外

NotSupportedError: (NotSupportedError) ('Python type list not supported.  param=1', 'HY097') 
Run Code Online (Sandbox Code Playgroud)

是否有任何解决方法可以允许我将列表绑定到'in'子句的参数?

python sqlalchemy

24
推荐指数
4
解决办法
2万
查看次数

如何?CURRENT_TIMESTAMP时区'UTC'

我如何修改我的电话

sqlalchemy.func.current_timestamp()
Run Code Online (Sandbox Code Playgroud)

带来的东西

CURRENT_TIMESTAMP AT TIME ZONE 'UTC'
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

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

如何在SQLAlchemy中定义复合主键

我正在尝试使用SQLAlchemy和MySQL为具有复合主键的表创建表映射,我不确定我是否正确行事.使用复合主键定义现有表.

这是映射类定义:

class table1(Base):
    __tablename__ = 'table1'

    col1 = Column(String, primary_key=True)
    col2 = Column(String, primary_key=True)
    col3 = Column(String)

    def __init__ = (self, col1, col2, col3):
        self.col1 = col1
        self.col2 = col2
        self.col3 = col3
Run Code Online (Sandbox Code Playgroud)

这匹配数据库中已有的记录a = table1('test','test','test')

如果我将此添加到会话并在表中添加记录,然后使用数据,我得到MySQL错误(1062重复条目).

session.add(a)
b = session.query(table1)
for instance in b:
    print(instance.col1, instance.col2)
Run Code Online (Sandbox Code Playgroud)

如果我正在使用单键表,我会收到此错误:

New instance <table2 at 0x2f204d0> with identity key 
(<class '__main__.table2'>,('test',)) conflicts with 
persistent instance <table2 at 0x2f88770>
Run Code Online (Sandbox Code Playgroud)

我是否错误地定义了复合主键?如果没有,我为什么要进一步错误地得到MySQL错误而不是Python/SQLAlchemy错误?

python sqlalchemy composite-primary-key

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