我试图设置一个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在这种情况下不需要.
(新的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) 我想在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) 我想知道它们之间是否有区别
Object.assign({}, obj)
Run Code Online (Sandbox Code Playgroud)
和
JSON.parse(JSON.stringify(obj))
Run Code Online (Sandbox Code Playgroud)
用于深度克隆对象?任何人都可以解释他们是否有任何想法?
主键的列必须按特定顺序排列.
我从文档中看到一些代码:
class User(Base):
__tablename__ = 'users'
id = Column(Integer)
__mapper_args__ = {
'primary_key':[id]
}
Run Code Online (Sandbox Code Playgroud)
但它只是不起作用(我使用的是mysql,并且不会生成id主键).任何可能的解决方
我正在使用SQLAlchemy和ORM paragdim.我无法找到一种方法来执行CASE WHEN指令.我在网上找不到这方面的信息.
可能吗 ?
我一直在学习 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) 我出于性能原因使用这个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'子句的参数?
我如何修改我的电话
sqlalchemy.func.current_timestamp()
Run Code Online (Sandbox Code Playgroud)
带来的东西
CURRENT_TIMESTAMP AT TIME ZONE 'UTC'
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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错误?