小编Puf*_*ers的帖子

psycopg2.errors.DuplicateTable:关系“表名”已存在,但实际上不存在

我不断收到此错误 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但我真的很想知道为什么,因为这是曾经完美运行的代码的一部分。

[编辑]添加了我做的确保表不存在的操作

python postgresql psycopg2 flask

5
推荐指数
0
解决办法
894
查看次数

无法通过包 <文件名> 错误定位对象方法 <var name>

# 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.pmObject.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)

perl

4
推荐指数
1
解决办法
49
查看次数

为什么在执行 .backward() 之前执行 torch.sum()?

我可以从这个视频中看到下面这段代码试图做什么。但是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)

python machine-learning matplotlib gradient-descent pytorch

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

遍历数组后返回布尔值

我想看看是否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)变得无用。我当然可以引入一个可以从地图操作中更改的新变量,但我觉得应该有更好的方法来做到这一点。有人请插话并分享您的知识。

perl

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

迭代数组引用

# 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在每个关键字中引用的正确方法是什么。

perl

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