Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chèn dữ liệu từ Perl vào MysQL

Việc bạn sử dụng $db_config biến trông có vẻ đáng ngờ đối với tôi. Hàm băm cấu hình của bạn lạ hoặc bạn đang sử dụng các giá trị thay vì khóa.

Bạn chưa cho chúng tôi xem $db_config ở đâu được thiết lập, nhưng tôi đoán nó trông giống như thế này:

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

Và sau đó bạn sẽ sử dụng nó như thế này:

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

Lưu ý rằng tôi đã sử dụng các tên khóa (name , hostport ) thay vì các giá trị (Top_Data , 127.0.0.13306 ).

Tôi cũng sẽ chỉ ra rằng bạn có thể đơn giản hóa điều này một chút bằng cách sử dụng khả năng của Perl để mở rộng các biến bên trong một chuỗi được trích dẫn kép.

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

Có một vấn đề khác sau đó, với câu lệnh SQL của bạn.

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)';

Các giá trị mà bạn nên chèn là các mục dữ liệu thực tế. Vì vậy, nơi bạn có các chuỗi "float", "varchar" hoặc "date", bạn sẽ thực sự có các mục dữ liệu (một số dấu phẩy động, một chuỗi hoặc một ngày).

Cuối cùng, khi đã chuẩn bị xong câu lệnh của mình, bạn không cần phải chuyển nó vào execute() phương pháp. Tuy nhiên, bạn nên xem xét việc sử dụng các điểm ràng buộc trong SQL của mình và chuyển các mục dữ liệu thực tế của bạn tới execute() gọi




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tương đương với lỗ đen là gì?

  2. Docker-Compose không thể kết nối với MySQL

  3. libmysqlclient15-dev trên máy Mac?

  4. Câu lệnh SQL IN - giữ các bản sao khi trả về kết quả

  5. MySQL chọn các bản ghi có tổng lớn hơn ngưỡng