相关疑难解决方法(0)

如何检查给定模式中是否存在表

Postgres 8.4及更高版本的数据库包含public模式中的模式和公司特定表中的公用表company.
company模式名称始终'company'以公司编号开头并以公司编号结束.
所以可能有以下模式:

public
company1
company2
company3
...
companynn
Run Code Online (Sandbox Code Playgroud)

应用程序始终适用于单个公司.
search_path相应指定在ODBC或连接Npgsql的字符串,如:

search_path='company3,public'
Run Code Online (Sandbox Code Playgroud)

如何检查给定表是否存在于指定的companyn模式中?

例如:

select isSpecific('company3','tablenotincompany3schema')
Run Code Online (Sandbox Code Playgroud)

应该返回false,并

select isSpecific('company3','tableincompany3schema')
Run Code Online (Sandbox Code Playgroud)

应该回来true.

在任何情况下,该函数应仅检查companyn传递的模式,而不检查其他模式.

如果两者public和传递的模式中都存在给定的表,则该函数应该返回true.
它适用于Postgres 8.4或更高版本.

sql database postgresql information-schema search-path

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

如果首先可以避免异常,最好"尝试"某些东西并捕获异常或测试?

我应该测试if某些东西是有效的还是只是try为了捕获异常?

  • 有没有可靠的文件说一种方式是首选的?
  • 一种方式更pythonic

例如,我应该:

if len(my_list) >= 4:
    x = my_list[3]
else:
    x = 'NO_ABC'
Run Code Online (Sandbox Code Playgroud)

要么:

try:
    x = my_list[3]
except IndexError:
    x = 'NO_ABC'
Run Code Online (Sandbox Code Playgroud)

一些想法......
PEP 20说:

错误不应该默默地传递.
除非明确沉默.

应该使用a try而不是if被解释为默认传递的错误?如果是这样,你是否通过这种方式使用它来明确地对它进行静音,从而使它成为可能?


不是指的情况下,你只能做的事情1路; 例如:

try:
    import foo
except ImportError:
    import baz
Run Code Online (Sandbox Code Playgroud)

python if-statement exception-handling try-catch pep

125
推荐指数
5
解决办法
4万
查看次数

在python中使用try vs if

在测试变量有值时,是否有理由决定使用哪一个try或哪些if结构?

例如,有一个函数返回列表或不返回值.我想在处理之前检查结果.以下哪一项更可取,为什么?

result = function();
if (result):
    for r in result:
        #process items
Run Code Online (Sandbox Code Playgroud)

要么

result = function();
try:
    for r in result:
        #process items
except TypeError:
    pass;
Run Code Online (Sandbox Code Playgroud)

相关讨论:

检查Python中的成员是否存在

python

120
推荐指数
5
解决办法
5万
查看次数

检查python下是否存在postgresql表(可能还有Psycopg2)

如何使用Psycopg2 Python库确定表是否存在?我想要一个真或假的布尔值.

python postgresql psycopg2

46
推荐指数
4
解决办法
3万
查看次数