[sgbd]Probleme caractere perl ( ' ) et script insertion SQL
Coucou :lol:
J'ai crée les tables de ma base de données et j'ai ensuite lancé mon script d'insertion qui va donc permettre d'inserer l'ensemble de mes données dans les tables correspondantes.
Ces données sont des informations issus d'un programme perl qui extrait les infos dans des sequences d'ADN...
Lors de l'insertion il y a des erreurs dû à la présence de simple quote dans le texte de certaines de mes données a inserer ce qui est donc interprété ...
Je donne un exemple pour que cela soit plus claire :wink:
Code:
1 2
|
print SQL " INSERT into info_tigr (numacc, idtigr, signal, length_seq, classement, position, polya, nameseq, date) VALUES ($comp, '$cle1', '$tab_tags[5]', '$tab_tags[3]', '$cle2', '$tab_tags[1]', '$tab_tags[4]', '$tab_tags[6]', '2004-05-26');\n"; |
ce qui donne par ex dans mon fichier SQL:
Code:
1 2
|
INSERT into info_tigr (numacc, idtigr, signal, length_seq, classement, position, polya, nameseq, date) VALUES (4060, 'TC260187', 'no Signal', '3186', 'Rn2', '3095', 'no', 'homologue to SP|P49902|5NTC_HUMAN Cytosolic purine 5'-nucleotidase (5'-nucleotidasecytosolic II)', '2004-05-26'); |
et voici l'erreur qui m'est indiqué quand je lance le fichier d'insertion :
Code:
1 2
|
psql:insertion151004.sql:161709: ERROR: syntax error at or near "'-nucleotidasecytosolic II)'" at character 244 |
Donc je pense que c'est a cause du "5' " car le " ' " est interprété mais je ne suis pas sure et si c'est a cause de cela comment je peux y remedier :roll:
Merci d'avance
:D Perlgirl :D
Re: Probleme caractere perl ( ' ) et script insertion SQL
Citation:
Envoyé par perlgirl
J'ai crée les tables de ma base de données et j'ai ensuite lancé mon script d'insertion qui va donc permettre d'inserer l'ensemble de mes données dans les tables correspondantes.
...
Code:
1 2
|
print SQL " INSERT into info_tigr (numacc, idtigr, signal, length_seq, classement, position, polya, nameseq, date) VALUES ($comp, '$cle1', '$tab_tags[5]', '$tab_tags[3]', '$cle2', '$tab_tags[1]', '$tab_tags[4]', '$tab_tags[6]', '2004-05-26');\n"; |
Je propose que tu laisses tomber l'idée de malaxer les données toi-même avec des regexps, tu tomberas toujours sur des données qui font tout casser. Sers-toi du module DBI pour qu'il fasse le boulot à ta place.
Code:
1 2 3 4 5 6 7 8 9 10
| my $db = DBI->connect("dbi:Pg:dbname=truc", "moi", "passwd");
END { $db and $db->disconnect }
print SQL "INSERT into info_tigr (a, b, c) values ("
. join( ',',
$db->quote( $tab_tags[6] ),
'2004-01-02',
$db->quote( $tab_tags[2] ),
)
. ");\n"; |
Notes comment j'utilise join pour me faire les virgules au bon endroit entre les champs, je n'ai pas à me prendre la tête à vérifier que tout est nickel.
Ce code n'utilise pas le module DBI pour faire l'insertion, tu continueras à utiliser psql pour l'import, mais je me demande si le temps que ça prend d'écrire le fichier et puis le relire avec psql ne serait pas plus lent que d'insérer les lignes directement dans ton script Perl via un statement préparé.
Tu peux d'ailleurs très bien dropper les index au début et les recréer à la fin du script de toute façon (ce que, je suppose, tu fais déjà dans le script pour psql).
N