sql >> Databáze >  >> RDS >> Mysql

Vkládání dat z Perlu do MysQL

Vaše použití $db_config proměnná se mi zdá podezřelá. Buď je váš konfigurační hash podivný, nebo místo klíčů používáte hodnoty.

Neukázali jste nám, kde je $db_config je nastaven, ale odhadl bych, že vypadá nějak takto:

$db_config = {
  name => 'Top_Data',
  host => '127.0.0.1',
  port => 3306,
  username => 'someone',
  password => 'a secret',
};

A pak byste to použili takto:

my $dsn = "DBI:mysql:database=".$db_config->{name}.";host=".$db_config->{host}.";port=".$db_config->{port};

Všimněte si, že jsem použil názvy klíčů (name , host a port ) namísto hodnot (Top_Data , 127.0.0.1 a 3306 ).

Zdůrazňuji také, že to můžete mírně zjednodušit použitím schopnosti Perlu rozšířit proměnné uvnitř řetězce s dvojitými uvozovkami.

my $dsn = "DBI:mysql:database=$db_config->{name};host=$db_config->{host};port=$db_config->{port}";

Později je tu další problém s vaším příkazem SQL.

my $sql = 'insert into Top(Load_Average, CPU_us, CPU_id, CPU-wa, CPU_hi, 
           CPU_si, CPU_st, Swap_Total, Swap_Free, Swap_Used, Memory_Total, 
           Memeory_Free, Memory_Used, Memory_Buff, Date) 
           values(float,float,float,float,float,float,float,float,
           varchar,varchar,varchar,varchar,varchar,varchar,date)';

Hodnoty, které byste měli vkládat, jsou skutečné datové položky. Takže tam, kde máte řetězce „float“, „varchar“ nebo „date“, byste ve skutečnosti měli mít datové položky (číslo s plovoucí desetinnou čárkou, řetězec nebo datum).

Nakonec, když jste si připravili své prohlášení, nemusíte jej předávat do execute() metoda. Měli byste se však podívat na použití vazebných bodů ve vašem SQL a předání vašich skutečných datových položek do execute() zavolejte




  1. Jak povolit omezení CHECK v SQL Server (příklad T-SQL)

  2. Ustanovení kde filtrovat řádky v MySQL

  3. Nastavení časového pásma relace pomocí jara jdbc oracle

  4. Sequelize bulkCreate() vrátí hodnotu NULL pro primární klíč