Schrift
[thread]3758[/thread]

MySQL Verständnisfrage: 100 Datensätze in eiem Schwung eintragen



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
olruebe01
 2007-01-03 18:47
#35038 #35038
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Tach mal wieder...

Ich habe mal eine kurze Verständnisfrage: Ich will in einem Script 100 Datensätze aus einer Textdatei in SQL eintragen.

Wie am besten?
1: 100 mal PREPARE und am ENDE 1X Execute... oder
2: 100 mal PREPARE und JEDES MAL EXECUTE... oder
3: per do?

Danke mal wieder :-)
Oliver
Relais
 2007-01-03 19:00
#35039 #35039
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
mit der [mysql=LOAD DATA INFILE]LOAD DATA INFILE[/mysql] - Syntax kannst Du alle Datensätze aus einer Datei in einem Rutsch laden. Mit DBI wäre das dann die Metode do
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
olruebe01
 2007-01-03 19:26
#35040 #35040
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Super, hört sich gut an.

Dazu fallen mir auf Anhieb 2 Fragen ein:
1: Werden die Inhalte der Textdatei automatisch geQuated?
2: Was ist, wenn ich einen Inhalt erst verändern möchte? Wenn ich also z.B. ein Datum in (jeder Zeile) der Textdatei in Sekunden wandeln möchte?

Lässt sich das lösen?
pq
 2007-01-03 19:51
#35041 #35041
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
am einfachsten ist sicher:
Code: (dl )
1
2
3
4
5
my $sth = $dbh->prepare("INSERT ... VALUES (?, ...)") or die $dbh->errstr;
for my $line (@lines) {
my @values = splitte_die_zeile($line);
 $sth->execute(@values) or die $dbh->errstr;
}

damit hast du nur ein prepare.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
olruebe01
 2007-01-03 20:29
#35042 #35042
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
@ pq: So dachte ich das auch aber LOAD DATA INFILE kligt auch nicht schlecht.

@ RElais: Allerdings bekomme ich es nicht hin. Ich versuche diesen Befehl:
Code: (dl )
LOAD DATA LOCAL INFILE '/home/httpd/vhosts/myDomain.de/httpdocs/test/0185a.dat' INTO TABLE test FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'


Klapt aber nicht. Die Datei ist korrekt und wird auch gefunden. Es gibt keine Fehlermeldung aber es escheinen einfach keine Einträge in der DB.

Ich habe einige Abwandlungen versucht aber die richtige war anscheinend nicht dabei. Was mache ich falsch?
pq
 2007-01-03 21:09
#35043 #35043
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=olruebe01,03.01.2007, 19:29]@ pq: So dachte ich das auch[/quote]
ach tatsächlich? du sprachst aber von 100 mal prepare. ist ein
unterschied zu nur einem einzigen.
wenn du die daten veraendern willst, wirst du um eine skriptlösung nicht
nicht herumkommen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
MisterL
 2007-01-03 21:36
#35044 #35044
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
[quote=olruebe01,03.01.2007, 19:29][/quote]
Guten Abend.

Quote
Ich habe einige Abwandlungen versucht aber die richtige war anscheinend nicht dabei. Was mache ich falsch?

Gute Frage...
Zum Vergleich mit MySQL 4.1
Code: (dl )
1
2
LOAD DATA LOCAL INFILE '../datafiles/payments.txt' INTO TABLE Payments
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

Evtl. sollte man aber auch den Gebrauch des PHPMyAdmin erwägen.
“Perl is the only language that looks the same before and after RSA encryption.”
olruebe01
 2007-01-03 23:01
#35045 #35045
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
@ pq: Richtig: SO habe ich es mir erst SPÄTER gedacht, nachdem ich einen Teil ENDLICH mal verstanden hatte...
Ist das also richtig, dass ich mit LOAD DATA INFILE die Daten nur 1:1 übernehmen kann, ja?

Dann ist das natülich nicht das, was ich brauche... :-(

Nochmal @pq: Mit dieser Version muss ich nicht mehr quoten, richtig?\n\n

<!--EDIT|olruebe01|1167858190-->
pq
 2007-01-04 00:00
#35046 #35046
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=olruebe01,03.01.2007, 22:01]Nochmal @pq: Mit dieser Version muss ich nicht mehr quoten, richtig?[/quote]
richtig
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
nepos
 2007-01-04 00:50
#35047 #35047
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn prepare + execute, dann 1x prepare und dann mit den 100 Datensaetzen jeweils einen execute.
LOAD DATA ist nur fuer den Fall, wo du die Daten nicht vorher bearbeiten musst.
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2007-01-03 18:47.