小编Red*_*ron的帖子

检查不存在的可选表

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

如何以及在何处进行检查以便可以设置变量(最好在应用程序设置期间),告诉我表格是否存在?

注意:在这种情况下,我将不得不尝试...而不是"请求原谅"

python sqlalchemy pyramid

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

在路径中检索具有特殊字符的文件时遇到麻烦

我在日期范围内运行了一堆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)

但是一次检索一个就好了!我怎样才能做到这一点?

hadoop hdfs

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

关于Python2.4的Valgrind:大量内存"可能丢失"

我写了一些没有错误的代码.该代码使用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)

python mysql valgrind memory-leaks python-2.4

2
推荐指数
1
解决办法
550
查看次数

金字塔:根据设置修改网站内容

是否可以根据development.ini或production.ini中的特定用户定义设置更改视图/模板的内容.

举个例子说我正在开发一个列出班级所有学生的金字塔网络应用程序.后端数据库只有一个表 - "学生".现在我开发了一个可选脚本,它还为数据库添加了一个表'teacher'.理想情况下,web-app应该能够针对这两种情况运行.如果缺少教师表,则不会查询它并只打印学生详细信息.如果教师表存在,它将打印教师的姓名以及学生的姓名.

在我看来,这可以通过以下方式之一完成 -

  1. 为教师+学生和学生页面保留单独的路线(URL).问题是当你只有学生信息时,你无法阻止人们实际呼叫前者.这将导致不必要的错误页面
  2. 在.ini文件中使用设置teacher_enabled = true/false.可以通过设置['teacher_enabled']在__ init __.py文件中访问该设置.只配置一条路线(比如'home','/'),但根据seeting变量是真还是假将其映射到不同的视图.这不允许使用@view_config装饰器,两种情况下的模板都必须分开
  3. 再次使用设置变量,以某种方式将其传递给视图.仅在视图中进行相关查询.例如 - 如果teacher_enabled为True,则查询教师表,否则仅查询学生表.将此变量也传递给模板,然后决定是否显示某些细节(例如教师姓名).

所以我的问题是我应该使用哪种方法?如果要将设置变量传递给视图,该怎么做?是否有一种处理这个问题的标准方法?

python pyramid

2
推荐指数
1
解决办法
261
查看次数

powershell如何从输出中删除`{} @`.有特殊的命令吗?

我输入gwmi win32_product | select -property name | select -first 1并输出到文件.我的结果是@{name=Google Talk Plugin}.

我怎么能摆脱@{},并命名.我只想要它展示Google Talk Plugin

powershell wmi

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

禁用缓存装饰器以测试dogpile.cache

我最近从烧杯切换到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)

如何更换缓存或禁用它进行单元测试?

python pylons caching beaker dogpile.cache

0
推荐指数
1
解决办法
1085
查看次数

Python字典参数错误

我实际上是为我的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 dictionary raspberry-pi

0
推荐指数
1
解决办法
88
查看次数