来自MS SQL世界,我倾向于大量使用存储过程.我目前正在编写一个应用程序使用了很多PostgreSQL plpgsql函数.我想做的是回滚特定函数中包含的所有INSERTS/UPDATES如果我在其中的任何一点得到异常.
我最初的印象是每个函数都包含在它自己的事务中,并且异常会自动回滚所有内容.但是,情况似乎并非如此.我想知道我是否应该将保存点与异常处理结合使用?但我并不真正了解事务和保存点之间的区别,以了解这是否是最好的方法.有什么建议吗?
CREATE OR REPLACE FUNCTION do_something(
_an_input_var int
) RETURNS bool AS $$
DECLARE
_a_variable int;
BEGIN
INSERT INTO tableA (col1, col2, col3)
VALUES (0, 1, 2);
INSERT INTO tableB (col1, col2, col3)
VALUES (0, 1, 'whoops! not an integer');
-- The exception will cause the function to bomb, but the values
-- inserted into "tableA" are not rolled back.
RETURN True;
END; $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud) 我只是有一个表格,其中包含国家列表及其ISO国家/地区代码.我将查询包装在存储过程(也称为函数)中,例如:
CREATE OR REPLACE FUNCTION get_countries(
) RETURNS setof record AS $$
SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
ERROR: a column definition list is required for functions returning "record"
Run Code Online (Sandbox Code Playgroud)
我知道我可以定义一个TYPE,然后像光标一样循环遍历记录集,但是在更新版本的PostgreSQL(我使用的是8.4.3)下,有更好的方法可以做到这一点,但我正在尝试要记住.
编辑:
这有效:
CREATE OR REPLACE FUNCTION get_countries(
) RETURNS setof country_codes AS $$
SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)
请注意"RETURNS setof [table name]".但它似乎并不是最灵活的.如果我尝试返回多个表的连接,它就会崩溃.
我有一个看起来像这样的页面:
Company A<br />
123 Main St.<br />
Suite 101<br />
Someplace, NY 1234<br />
<br />
<br />
<br />
Company B<br />
456 Main St.<br />
Someplace, NY 1234<br />
<br />
<br />
<br />
Run Code Online (Sandbox Code Playgroud)
有时分隔条目有两个而不是三个"br"标签.我如何使用BeautifulSoup解析此文档并提取字段?我很难过,因为我需要的文本位不包含在我可以简单地遍历的段落(或类似)标签中.
我正在试图找出设计几个类的最佳方法.我对Python(以及一般的OOP)很陌生,只是想确保我做得对.我有两个类:"用户"和"用户".
class User(object):
def __init__(self):
pass
class Users(object):
def __init__(self):
self.users = []
def add(self, user_id, email):
u = User()
u.user_id = user_id
u.email = email
self.users.append(u)
users = Users()
users.add(user_id = 1, email = 'bob@example.com')
Run Code Online (Sandbox Code Playgroud)
如果我想要检索我的用户,我使用:
for u in users.users:
print u.email
Run Code Online (Sandbox Code Playgroud)
"users.users"似乎有点多余.我这样做了吗?
我正在尝试使用Boto从CloudFormation模板中检索输出列表.我在文档中看到有一个名为的对象boto.cloudformation.stack.Output.但我认为这是未实现的功能.这目前可能吗?
我一直在尝试使用zipfile和shutil.make_archive模块递归创建目录的zip文件.两个模块都运行良好 - 除了空目录不会添加到存档.还会以静默方式跳过包含其他空目录的空目录.
我可以使用7Zip创建相同路径的存档,并保留空目录.因此我知道在文件格式本身中这是可能的.我只是不知道如何在Python中做到这一点.有任何想法吗?谢谢!
我只是想重写包含这个的页面:
<img src="http://www.example.com/foo/bar/hello.jpg" />
Run Code Online (Sandbox Code Playgroud)
为此:
<img src="http://cdn.example.com/foo/bar/hello.jpg" />
Run Code Online (Sandbox Code Playgroud)
我觉得这应该相当简单,但我花了三个小时阅读文档并尝试这样做.
使用PHP,我试图通过AuthSMTP(托管的SMTP服务)路由电子邮件.问题是PEAR邮件工厂自动尝试与服务器协商TLS连接.AuthSMTP不是简单地忽略该尝试,而是抛出错误.我需要一种明确告诉Mailer类不要尝试使用TLS的方法.有什么建议?
$from = "Example <noreply@example.com>";
$to = $email;
$subject = "This is an email";
$body_text = "plain text here";
$body_html = "<h1>HTML here!</h1>";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$mime = new Mail_mime('rn');
$mime->setTXTBody($body_text);
$mime->setHTMLBody($body_html);
$body = $mime->get();
$hdrs = $mime->headers($headers);
$host = "mail.authsmtp.com";
$port = 26;
$username = "my_username";
$password = "whatever_password";
$mailer = Mail::factory('smtp',
array ('host' => $host,
'auth' => true,
'port' => $port,
'username' => $username,
'password' => $password));
if (PEAR::isError($res)) …Run Code Online (Sandbox Code Playgroud) 我有一个包含字符串中不同字段的字符位置的字典.我想用这些信息来切割字符串.我不太确定如何最好地解释这一点,但这个例子应该说清楚:
输入:
mappings = {'name': (0,4), 'job': (4,11), 'color': (11, 15)}
data = "JohnChemistBlue"
Run Code Online (Sandbox Code Playgroud)
期望的输出:
{'name': 'John', 'job': 'Chemist', 'color': 'Blue'}
Run Code Online (Sandbox Code Playgroud)
请忽略这样一个事实:工作,颜色和名字的字符长度明显不同.我正在解析固定长度的字段,但为了说明目的将其简化.
随着行业趋向于"网络规模"应用程序架构(尽管我讨厌流行语),我知道Python已经引起了很多批评,因为GIL如何处理并发并成为瓶颈.我理解表面上的问题,但不足以知道其他过程语言如何处理引擎下的线程.Java有类似的问题吗?C#?红宝石?如果没有,为什么Python没有采用相同的策略?
我想将此转换[{u'Key': 'color', u'Value': 'red'}, {u'Key': 'size', u'Value': 'large'}]成:{'color': 'red', 'size': 'large'}.
有人有什么建议吗?我一直在玩列表推导,lambda函数,并且zip()超过一个小时,感觉我错过了一个明显的解决方案.谢谢!