我正在试图弄清楚如何将SQLAlchemy类分布在几个文件中,而我可以为生活找不到如何做到这一点.我对SQLAlchemy很新,所以如果这个问题很简单,请原谅我.
在每个自己的文件中考虑这3个类:
A.py:
from sqlalchemy import *
from main import Base
class A(Base):
__tablename__ = "A"
id = Column(Integer, primary_key=True)
Bs = relationship("B", backref="A.id")
Cs = relationship("C", backref="A.id")
Run Code Online (Sandbox Code Playgroud)
B.py:
from sqlalchemy import *
from main import Base
class B(Base):
__tablename__ = "B"
id = Column(Integer, primary_key=True)
A_id = Column(Integer, ForeignKey("A.id"))
Run Code Online (Sandbox Code Playgroud)
C.py:
from sqlalchemy import *
from main import Base
class C(Base):
__tablename__ = "C"
id = Column(Integer, primary_key=True)
A_id = Column(Integer, ForeignKey("A.id"))
Run Code Online (Sandbox Code Playgroud)
然后说我们有一个像这样的main.py:
from sqlalchemy import …
Run Code Online (Sandbox Code Playgroud) 我注意到在linux下编译并使用mingw进行交叉编译时,gcc的析构函数的行为有所不同.
在linux上,析构函数不会被调用,除非程序自己正常终止(返回main
).我想如果考虑到信号处理程序,那是有道理的.
但是,在Win32上,如果程序以CTRL-C结束,则会调用析构函数,但在从任务管理器中终止时则不会.
为什么是这样?无论进程如何终止,你会建议让析构函数被调用 - 特别是在Win32上?
示例代码:
#include <stdio.h>
int main(int argc, char **argv) {
printf("main\n");
while(1) {}
return 0;
}
__attribute__((destructor)) static void mydestructor(void) {
printf("destructor\n");
}
Run Code Online (Sandbox Code Playgroud) 当涉及到网络代码时,我从未设法以任何优雅或自动化的方式从单元测试转移到集成测试。
所以我的问题是:给定一个简单的基于单线程客户端/服务器的网络应用程序,您将如何将客户端和服务器集成到您当前最喜欢的测试套件中(我目前使用check)。
我当然愿意改变单元测试套件来实现我的目标。
编辑:虽然我很欣赏这些答案,但我更多的是寻找一些将集成测试集成到我的单元测试框架中的神奇方法(如果可能的话)。就像fork () 或其他东西可以应用而不会产生太多副作用。
basename(3)和dirname(3)可以将绝对路径拆分为各自的组件.
没有使用snprintf(3),是否有一个自然的posix兼容库调用反向 - 获取目录和文件名并连接它们?
手动连接对我来说很好,但有时会变得有点单调乏味.
我经常使用便捷函数返回指向静态缓冲区的指针,如下所示:
char* p(int x) {
static char res[512];
snprintf(res, sizeof(res)-1, "number is %d", x));
return res;
}
Run Code Online (Sandbox Code Playgroud)
并将它们作为其他函数的参数在整个地方使用:
...
some_func( somearg, p(6) );
....
Run Code Online (Sandbox Code Playgroud)
然而,这种"便利性"除了不是线程安全之外还有一个恼人的缺点(可能还有更多原因):
some_func( somearg, p(6), p(7) );
Run Code Online (Sandbox Code Playgroud)
上面显然没有做我想要的,因为最后两个参数将指向相同的内存空间.我希望能够在没有太多麻烦的情况下使上述方法正常工作.
所以我的问题是:
我是否有一些神奇的方式来完成我想要的东西而不用繁琐的分配和释放?
*****更新2010-04-20*****
无耻的插头:在这里看看我自己的答案
我想它会起作用,但它也接近于矫枉过正.意见?
c ×4
destructor ×1
gcc ×1
mingw ×1
pointers ×1
posix ×1
python ×1
sqlalchemy ×1
unit-testing ×1