我正在使用SQLAlchemy + Pyramid来操作我的数据库.但是,有一些可选表格并不总是存在于DB中.因此,在查询它们时,我尝试用这些来捕获这些情况NoSuchTableError
try:
x = session.query(ABC.name.label('sig_name'),func.count('*').label('count_')).join(DEF).join(MNO).filter(MNO.relevance >= relevance_threshold).group_by(DEF.signature).order_by(desc('count_')).all()[:val]
except NoSuchTableError:
x = [-1,]
Run Code Online (Sandbox Code Playgroud)
但是在执行此语句时,我得到了一个ProgrammingError
ProgrammingError: (ProgrammingError) (1146, "Table 'db.mno' doesn't exist")
Run Code Online (Sandbox Code Playgroud)
为什么SQLAlchemy会引发更一般的ProgrammingError而不是更具体的NoSuchTableError?如果这确实是预期的行为,我如何确保应用程序显示正确的信息,具体取决于表是否存在?
EDIT1
由于这是我的webapp的一部分,因此DB的模型位于models.py(在我的金字塔webapp下).我的.ini文件中有一个设置,要求用户选择是否有其他表可用.但不信任用户,我希望能够检查自己(在视图中)表是否存在.争议表就像(在models.py)
class MNO(Base):
__tablename__="mno"
id=Column(Integer,primary_key=True,autoincrement=True)
sid=Column(Integer)
cid=Column(mysql.MSInteger(unsigned=True))
affectability=Column(Integer)
cvss_base=Column(Float)
relevance=Column(Float)
__table_args__=(ForeignKeyConstraint(['sid','cid',],['def.sid','def.cid',]),UniqueConstraint('sid','cid'),)
Run Code Online (Sandbox Code Playgroud)
如何以及在何处进行检查以便可以设置变量(最好在应用程序设置期间),告诉我表格是否存在?
注意:在这种情况下,我将不得不尝试...而不是"请求原谅"
我在日期范围内运行了一堆m/r报告,现在有一系列目录,如:
/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120101,20120102,20120103,20120104,20120105,20120106,20120107}
/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120108,20120109,20120110,20120111,20120112,20120113,20120114}
/user/michael/output/TrueListingSellThroughFromLeafCategory/{20120115,20120116,20120117,20120118,20120119,20120120,20120121}
Run Code Online (Sandbox Code Playgroud)
我在浏览这些目录时遇到了很多困难.如果我尝试ls其中一个,它会将日期作为列表,并为每个目录查找不同的目录.如果我逃避括号,我得到一个没有这样的文件或目录错误.如果我用%7B和%7D替换大括号,它就类似了.
如果我通配那个级别,那么我可以浏览更低:
/user/michael/output/TrueListingSellThroughFromLeafCategory/*
Run Code Online (Sandbox Code Playgroud)
但是一次检索一个就好了!我怎样才能做到这一点?
我写了一些没有错误的代码.该代码使用MySQLdb进行(频繁)数据库访问,并使用4个不同的数据库.还会生成几个日志文件并使用日志记录模块.真正的担心是,当运行Valgrind时,我得到以下内容
==7840== LEAK SUMMARY:
==7840== definitely lost: 29 bytes in 1 blocks
==7840== indirectly lost: 0 bytes in 0 blocks
==7840== possibly lost: 1,104,793 bytes in 8,865 blocks
==7840== still reachable: 70,684 bytes in 2,194 blocks
==7840== suppressed: 0 bytes in 0 blocks
Run Code Online (Sandbox Code Playgroud)
最大的泄漏是
==7840== 393,216 bytes in 1 blocks are possibly lost in loss record 1,585 of 1,585
==7840== at 0x4005903: malloc (vg_replace_malloc.c:195)
==7840== by 0x204929E: ??? (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x2054833: PyString_InternInPlace (in /usr/lib/libpython2.4.so.1.0)
==7840== by 0x20A0362: ??? …Run Code Online (Sandbox Code Playgroud) 是否可以根据development.ini或production.ini中的特定用户定义设置更改视图/模板的内容.
举个例子说我正在开发一个列出班级所有学生的金字塔网络应用程序.后端数据库只有一个表 - "学生".现在我开发了一个可选脚本,它还为数据库添加了一个表'teacher'.理想情况下,web-app应该能够针对这两种情况运行.如果缺少教师表,则不会查询它并只打印学生详细信息.如果教师表存在,它将打印教师的姓名以及学生的姓名.
在我看来,这可以通过以下方式之一完成 -
所以我的问题是我应该使用哪种方法?如果要将设置变量传递给视图,该怎么做?是否有一种处理这个问题的标准方法?
我输入gwmi win32_product | select -property name | select -first 1并输出到文件.我的结果是@{name=Google Talk Plugin}.
我怎么能摆脱@{},并命名.我只想要它展示Google Talk Plugin?
我最近从烧杯切换到dogpile.cache.它在实时代码中运行良好,但我遇到了测试问题.如何禁用缓存进行测试?
我目前正在使用
#caching.py
from dogpile.cache import make_region
region = make_region().configure(
'dogpile.cache.redis',
expiration_time = 3600,
arguments = {
'host': '127.0.0.1',
'port': 6379
}
)
#db.py
from .caching import region
@region.cache_on_arguments()
def fetch_from_db(item):
return some_database.lookup(item)
Run Code Online (Sandbox Code Playgroud)
如何更换缓存或禁用它进行单元测试?
我实际上是为我的Raspberry Pi的GPIO端口编写一个控制程序,我在python中编程并想用字典来做.
好的,要设置一个GPIO端口,它需要2个参数,正如您在字典表中看到的那样,我使用了两个参数,当您编写类似"00"的内容时,您应该得到这两个参数.
例如,能够控制GPIO端口的代码是:
output(11, low)
Run Code Online (Sandbox Code Playgroud)
正如你在字典中看到的那样,我应该像上面的代码一样得到两个参数,但是我仍然得到一个错误,只有一个参数而不是两个.这是我的代码
import RPi.GPIO as GPIO
from RPi.GPIO import input as input
from RPi.GPIO import output as output
from RPi.GPIO import HIGH as high
from RPi.GPIO import LOW as low
from time import sleep as sleep
GPIO.setmode(GPIO.BOARD)
entry = raw_input("Which port you want to control?:")
while entry != "xx" :
io = {
'00' : "11, low",
'01' : "11, high",
'10' : "12, low",
'11' : "12, high",
'20' : "13, low",
'21' : …Run Code Online (Sandbox Code Playgroud) python ×5
pyramid ×2
beaker ×1
caching ×1
dictionary ×1
hadoop ×1
hdfs ×1
memory-leaks ×1
mysql ×1
powershell ×1
pylons ×1
python-2.4 ×1
raspberry-pi ×1
sqlalchemy ×1
valgrind ×1
wmi ×1