Perl - baza danych (zapis)

Odpowiedz Nowy wątek
2016-11-19 08:24
0

Potrzebuje skryptu który zapisuje dane z pliku (np.csv) do bazy danych. Proszę o pomoc

Pozostało 580 znaków

2016-11-19 08:50
0

Powiedzmy, że masz plik csv - czy wartości mogą być ciągami z przecinkiem?1,2,3,"Hello, world!",4,5Jeżeli masz pewność, że nigdy takich wartości nie będzie, to możesz lecieć linia po linii i robić zwykły split na przecinku.
Lepiej jednak po prostu użyć https://metacpan.org/pod/Text::CSV

Odnośnie bazy danych - DBI, bo zakładam, że ORM-a nie potrzebujesz. Ewentualnie coś co działa na DBI: http://search.cpan.org/~juerd[...]imple-1.35/lib/DBIx/Simple.pm


Pozostało 580 znaków

2016-11-19 09:20
0

Powiedzmy że mam taki plik z ulicami
Marszałkowska 128
Ostrobramska 100
Wołoska 98
Potocka 11
KEN 95
I jest ten plik zapisany w csv.
Jakby ktoś mógł napisać taki skrypt który właśnie zapisze te dane (ulice) do bazy postgres.

Pozostało 580 znaków

2016-11-19 12:50
0

Jeśli cała linia jest wartością, to nie potrzebujesz parsować tego jako csv (zresztą, i tak nie masz "comma separated values" :P)

use strict;
use DBIx::Simple;

my $db = DBIx::Simple->connect(
    'DBI:mysql:database=perltest', # zamiast 'mysql' możesz użyć 'Pg' łącząc się z bazą postgres
    'xupicor', '1234', # uzytkownik, hasło
    { RaiseError => 1 } # opcje dodatkowe, RaiseError sprawia, że metody rzucają wyjątkami zamiast zwracać kody błędów
);
$db->query('SET NAMES utf8'); # dla postgresa albo --client_encoding w DSN, albo obejmij utf8 apostrofami, albo SET CLIENT_ENCODING TO

# wczytujemy dane z pliku do bazy
while (<>) { # linia po linii
    chomp ; # \n na końcu linii wyrzucamy
    $db->query('INSERT INTO locations(address) VALUES (?)', $_);
}

# w terminalu:
#$ perl inserter.pl < address_list.csv

edytowany 2x, ostatnio: Xupicor, 2016-11-19 13:19

Pozostało 580 znaków

2016-11-25 15:52
0

Location(adress) - czyli?

Ścieżka? - Raudi 2016-11-25 15:52

Pozostało 580 znaków

2016-11-25 17:13
0

Nie ma tam żadnego "Location(adress)" - jest locations(address). locations to nazwa tabeli, address to nazwa kolumny.
Zdajesz sobie sprawę z tego, że zanim to zadziała musisz mieć utworzoną odpowiednią bazę danych, prawda?


chyba nie do końca. Ucze sie programować w Perlu od podstaw i chyba ktos mnie wrzucil na gleboka wode. To jak ma wygladac ta baza danych ? - Raudi 2016-11-25 23:01

Pozostało 580 znaków

2016-11-25 23:14
0

Potrzebny schemat da się wydedukować z kodu. Tabela locations przechowuje... lokacje, adresy. W tej tabeli masz kolumnę o nazwie address przechowującą ciąg znaków będący adresem.
https://www.postgresql.org/docs/current/static/tutorial.html

Jeżeli nic nie wiesz na temat baz danych, SQL i Perla, to może nie na głęboką, ale już troszkę w sadzawkę. :P Da się z niej wyjść dość łatwo po prostu ucząc się od podstaw tych rzeczy.
Powiedzmy, że przyznałbym rację, jeżeli nie miałbyś pojęcia o programowaniu w ogóle.


edytowany 1x, ostatnio: Xupicor, 2016-11-25 23:14
Dlatego jestem wdzięczny za pomoc :-) bo to prawda perl to moje początki z programowaniem ogólnie. Wiem że warto od innego języka się nauczyć ale właśnie zacząłem od perla bo tego potrzebuje. O SQL trochę wiem tylko poprostu nie załapałem o co w rym przykładzie chodzi ale już wiem. Mam jeszcze jedną prośbę... - Raudi 2016-11-26 13:11

Pozostało 580 znaków

2016-11-26 13:14
0

Mam taki program (patrz załącznik). Jak zrobić teraz
W kodzie, żeby w tej pętli while "rozbić" te dane z jednej linii na zmienne. Separatorem jest znak ";".
Bo później w Insert pod ? Wstawię te zmienne

Podaj przykładowy plik z danymi. - Xupicor 2016-11-26 13:28

Pozostało 580 znaków

2016-11-26 13:39
0

Daniel Kos 30 lat mężczyzna warszawa
Tomasz wikiel 24 lat mężczyzna Kraków
Elżbieta Pawłowska 60 lat kobieta Wrocław
Katarzyna Kowalczyk 30 lat kobieta Gdańsk

Ja tu nie widzę żadnych separatorów poza spacją i \n... - Xupicor 2016-11-26 13:41
Między słowami są separatory :-) - Raudi 2016-11-26 13:49
Zamiast spacji - Raudi 2016-11-26 13:50
Między słowami, czy między jednostkami logicznymi? Powyżej nie widzę, a w myślach nie czytam. :P - Xupicor 2016-11-26 14:10
Ok :-) Daniel Kos ; 30lat ; mężczyzna ; warszawa ; Tomasz; wikiel; 24 lat; mężczyzna ; Kraków ; Elżbieta Pawłowska ; 60lat; kobieta; Wrocław ; Katarzyna Kowalczyk ; 30 lat ; kobieta; Gdańsk - Raudi 2016-11-26 14:13

Pozostało 580 znaków

2016-11-26 16:39
0

Daniel Kos ; 30lat ; mężczyzna ; warszawa ;
Tomasz; wikiel; 24 lat; mężczyzna ; Kraków ;
Elżbieta Pawłowska ; 60lat; kobieta; Wrocław ;
Katarzyna Kowalczyk ; 30 lat ; kobieta; Gdańsk

Pozostało 580 znaków

2016-11-26 17:02
0
$ cat csv.pl
use strict;
use DBIx::Simple;
use Text::CSV;

my $db = DBIx::Simple->connect(
        'DBI:mysql:database=perltest',
        'xupicor', '1234',
        { RaiseError => 1 }
);
$db->query('SET NAMES utf8');

my $csv = Text::CSV->new ( { sep_char => ';', binary    => 1, } )
        or die "Cannot use CSV: ".Text::CSV->error_diag ();

open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!";
while (my $row = $csv->getline($fh)) {
    my $age = $row->[1];
    $age =~ s/(\d+)/$1/;
    $db->query("INSERT INTO persons(name, age, sex, city) VALUES(??)",
            $row->[0], $age, $row->[2], $row->[3]);
}
$csv->eof or $csv->error_diag();
close $fh;

$ cat test.csv
Daniel Kos;30 lat;mężczyzna;warszawa
Tomasz wikiel;24 lat;mężczyzna;Kraków
Elżbieta Pawłowska;60 lat;kobieta;Wrocław
Katarzyna Kowalczyk;30 lat;kobieta;Gdańsk

$ ...
mysql> select * from persons;
+----+----------------------+-----+-------------+----------+
| id | name                 | age | sex         | city     |
+----+----------------------+-----+-------------+----------+
|  1 | Daniel Kos           |  30 | mężczyzna   | warszawa |
|  2 | Tomasz wikiel        |  24 | mężczyzna   | Kraków   |
|  3 | Elżbieta Pawłowska   |  60 | kobieta     | Wrocław  |
|  4 | Katarzyna Kowalczyk  |  30 | kobieta     | Gdańsk   |
+----+----------------------+-----+-------------+----------+
4 rows in set (0.00 sec) 

https://perlmaven.com/how-to-read-a-csv-file-using-perl

Musisz się przyłożyć, bo nawet taki noob jak ja potrafi sklecić tak podstawowy przykład. :P


edytowany 1x, ostatnio: Xupicor, 2016-11-26 17:05
Powiedz z jakiej strony mogę korzystać aby od podstaw się uczyć perla i takich kodów - Raudi 2016-11-26 17:08

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0