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或更高版本.
我应该测试if某些东西是有效的还是只是try为了捕获异常?
例如,我应该:
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) 在测试变量有值时,是否有理由决定使用哪一个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)
如何使用Psycopg2 Python库确定表是否存在?我想要一个真或假的布尔值.
python ×3
postgresql ×2
database ×1
if-statement ×1
pep ×1
psycopg2 ×1
search-path ×1
sql ×1
try-catch ×1