我不断收到此错误
psycopg2.errors.DuplicateTable: relation "customers" already exists
,我知道这意味着什么。
问题是,当我运行程序时,实际上没有名为“ customers”的表。为了确保这一点,我创建了一个没有表的新数据库,或者在运行代码之前再次检查了现有数据库中是否没有这样的表。我添加了打印语句,以检查其冲突之处。
def createTable():
conn = pg.connect(conn_str)
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
sql = """
create table customers
(
...
)
"""
print("checking 1111111") # printed
cur.execute(sql)
print("checking 2222222") # not printed
conn.commit()
if __name__ == "__main__":
createTable()
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
我可以通过添加IF NOT EXISTS来解决该问题,sql但我真的很想知道为什么,因为这是曾经完美运行的代码的一部分。
[编辑]添加了我做的确保表不存在的操作
# Object.pm
sub update {
$table = $self->DB_TABLE;
...
}
Run Code Online (Sandbox Code Playgroud)
该update函数在值更新时被触发,并且似乎被其他文件多次执行,其相关部分如下所示:
# Status.pm
use constant DB_TABLE => 'Status';
Run Code Online (Sandbox Code Playgroud)
# Flag.pm
use constant DB_TABLE => 'flag';
Run Code Online (Sandbox Code Playgroud)
我不知道这个项目的内部运作,但修改Flag.pm和Object.pm下面,因为我需要使用不同的表进行更新flag。
# Flag.pm
use constant DB_TABLE => 'flag';
use constnat DB_UPDATE_TABLE => '<Table to use when updating flag>';
Run Code Online (Sandbox Code Playgroud)
# Object.pm
sub update {
my $table = undef;
if($self->DB_UPDATE_TABLE) {
$table = $self->DB_UPDATE_TABLE;
} else {
$table = $self->DB_TABLE;
}
}
Run Code Online (Sandbox Code Playgroud)
当我触发时sub update,我得到
Can't locate object …Run Code Online (Sandbox Code Playgroud) 我可以从这个视频中看到下面这段代码试图做什么。但是sumfromy=torch.sum(x**2)让我感到困惑。通过sum操作,y变成一个只有一个值的张量。正如我所理解的.backward()计算导数,为什么我们要使用sum并减少y到一个值?
import pytorch
import matplotlib.pyplot as plt
x = torch.linspace(-10.0,10.0,10, requires_grad=True)
Y = x**2
y = torch.sum(x**2)
y.backward()
plt.plot(x.detach().numpy(), Y.detach().numpy(), label="Y")
plt.plot(x.detach().numpy(), x.grad.detach().numpy(), label="derivatives")
plt.legend()
Run Code Online (Sandbox Code Playgroud) 我想看看是否keyword_objects有一个元素{name=>'CRASH', status=>'+'}。
# $bug is a reference to the below data
{
'keyword_objects' => [
bless( { 'name' => 'CRASH', 'status' => '+'}, 'SomeModule::SomeFilename' ),
bless( { 'name' => 'CUSTOMER', 'status' => '-' }, 'SomeModule::SomeFilename' ) ],
'category' => 'error'
}
Run Code Online (Sandbox Code Playgroud)
我filter在另一种语言中找不到类似的东西,所以我的替代方法是使用map.
my @isCrash = map { $_->name eq 'CRASH' && $_->status eq '+' } @{ $bug->{keyword_objects} };
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,当没有这样的关键字时,每次操作完成时,似乎都返回一个空值。@isCrash成为多个空值的数组并if(@isCrash)变得无用。我当然可以引入一个可以从地图操作中更改的新变量,但我觉得应该有更好的方法来做到这一点。有人请插话并分享您的知识。
# data $bug
{
'keyword_objects' => [
bless( { 'id' => 15, 'name' => 'CRASH'}, 'SomeModule::SomeFilename' ),
bless( { 'id' => 6, 'name' => 'CUSTOMER' }, 'SomeModule::SomeFilename' ) ],
'category' => 'error'
}
Run Code Online (Sandbox Code Playgroud)
foreach my $keyword ($bug->{keyword_objects}) {
print Dumper($keyword);
}
Run Code Online (Sandbox Code Playgroud)
它打印整个keyword_objects而不是其中的单个项目。现在你应该很明显我对 Perl 知之甚少,我还想问问name在每个关键字中引用的正确方法是什么。