小编Ptr*_*con的帖子

sqlalchemy外键关系属性

我有一个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请求等.我试图查找关联对象等,但我很难用它.

任何帮助将不胜感激.

python sqlalchemy flask-sqlalchemy

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

python getattr 和 setattr 与 self.__dict__

我一直在阅读有关重写 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)

python

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

RobotFramework 关键字变量未设置

我正在使用 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)

python automated-tests smoke-testing robotframework

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

pytest fixture params with monkeypatch

我是猴子修补数据库连接类作为一个夹具.我想要完成的是将一些参数传递给我的猴子修补夹具,因为不同的测试都需要相同的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 …

python pytest

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