我有一个User表和一个Friend表.Friend表包含两个外键,包括我的User表和状态字段.我试图能够在Friend对象上调用我的User表中的属性.例如,我希望能够做一些像friend.name或friend.email这样的事情.
class User(Base):
""" Holds user info """
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String(25), unique=True)
email = Column(String(50), unique=True)
password = Column(String(25))
admin = Column(Boolean)
# relationships
friends = relationship('Friend', backref='Friend.friend_id',primaryjoin='User.id==Friend.user_id', lazy='dynamic')
class Friend(Base):
__tablename__ = 'friend'
user_id = Column(Integer, ForeignKey(User.id), primary_key=True)
friend_id = Column(Integer, ForeignKey(User.id), primary_key=True)
request_status = Column(Boolean)
Run Code Online (Sandbox Code Playgroud)
当我获得friend
对象时我只有2 user_ids
并且我希望显示每个用户的所有属性,以便我可以在表单等中使用该信息.我是sqlalchemy的新手 - 仍在尝试学习更多高级功能.这只是一个较大的Flask项目的片段,这个功能将用于friend
请求等.我试图查找关联对象等,但我很难用它.
任何帮助将不胜感激.
我一直在阅读有关重写 getattr 和 setattr 的内容,如果我在构造函数中使用 self.__dict__ = self ,我无法弄清楚是否需要重写赋值。
一旦我创建了该类的实例
a = OPT(foo='bar')
Run Code Online (Sandbox Code Playgroud)
a.foo 和 a['foo'] 在有或没有 __getattr__ 和 __setattr__ 声明的情况下都可以工作。
有人可以解释一下我是否需要两者。如果我这样做,为什么?谢谢!
class OPT(dict):
__getattr__ = dict.__getitem__
__setattr__ = dict.__setitem__
def __init__(self, *args, **kwargs):
super(OPT, self).__init__(*args, **kwargs)
self.__dict__ = self
Run Code Online (Sandbox Code Playgroud) 我正在使用 RobotFramework 和 RobotRequestsLibrary 为一系列 API 创建冒烟测试套件。这是我第一次使用 RobotFramework。在尝试清理代码并使其更易于维护时,我决定尝试使用关键字来删除所有附带的细节。
例如,这里有两个我想要清理的测试:
*** Variables ***
${sint} http://int.somecoolwebsite.com
*** Test Cases ***
Retrieve Store Info By Code Should Return Successful
[Tags] get
Create Session data-int ${sint}
${resp}= Get Request int /store/1234
Should Be Equal As Strings ${resp.status_code} 200
Retrieve All Store Info Should Return Successful
[Tags] get
Create Session data-int ${sint}
${resp}= Get Request int /stores
Should Be Equal As Strings ${resp.status_code} 200
Run Code Online (Sandbox Code Playgroud)
我尝试使用关键字:
*** Variables ***
${sint} http://int.somecoolwebsite.com
*** Keywords ***
Make ${call} …
Run Code Online (Sandbox Code Playgroud) 我是猴子修补数据库连接类作为一个夹具.我想要完成的是将一些参数传递给我的猴子修补夹具,因为不同的测试都需要相同的monkeypatch但具有不同的返回值.
@pytest.fixture
def data():
now = datetime.datetime.now()
data = Data(now)
return data
@pytest.fixture
def patch_db(monkeypatch):
class FakeDbConnection:
def __init__(*args, **kwargs):
pass
def fetchall(self):
return [1,2,3]
monkeypatch.setattr(DbConnection, 'execute', FakeDbConnection)
def test_get_somevalue(patch_db, data):
userids = data.get_userids()
assert userids == [1,2,3]
def test_get_something_else(patch_db, data):
userids = data.get_userids()
assert userids == [6,7,8]
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是因为我的fetchall函数只返回[1,2,3].我试着让patch_db fixture拿params:
@pytest.fixture(scope='module', params=[[1, 2, 3], [4, 5, 6]])
def patch_db(monkeypatch, test_values):
class FakeDbConnection:
def __init__(*args, **kwargs):
pass
def fetchall(self):
return test_values.param
monkeypatch.setattr(DbConnection, 'execute', FakeDbConnection)
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
ScopeMismatch: You tried to access the …