J'ai dans l'idee de developper une petite application de gestion en
python. Il y a 12 tables pour l'instant et je comptais utiliser Sqlite
que je trouve tres sympa et qui je trouve s'accorde bien avec python,
mais sqlite ne gere pas les FK, faut les coder en trigger, c'est type
less etc, donc j'ai fini par lacher l'affaire et me tourner vers
firebird (pour ceux qui ne connaissent pas trop c'est un SGBD basé sur
Interbase 6 opensource de borland), le SGBD en lui même répond a toutes
mes attentes et meme plus...
En utilisant un sgbd client serveur je perdais l'interet du fichier
unique sqlite et de son architecture non C/S, ce que je trouvais
parfait pour ma petite appli dont la base de donnée ne sera pas
attaquée par plusieures personnes. Firebird propose une version
Desktop, c'est a dire un fichier unique piloté par une DLL (à la sqlite
donc), c'est donc avec interet que je me suis tourné vers cette
solution pour l'environnement windows (partant du fait que les
utilisateurs winwin n'aiment pas trop avoir à installer un serveur, que
c'est disproportionné etc et que les utilisateurs unix ont des chance
d'avoir une base de donnée déja installé et peut etre meme Firebird
justement).
Là je me heurte a un probleme : les dev python qui attaquent le sgbd
desktop firebird, j'en ai pas trouvé :)
Je pense que pour les utilisateurs linux de mon application, ca ne
devrait pas trop poser de probleme, je leur laisse la possiblité de
configurer eux meme leur sgbd et ca roule en utilisant Python Database
API, par contre je ne sais pas trop comment faire pour utiliser la
version desktop de firebird sous windows, donc je cherche des retours
d'expérience.
Si vous avez une solution pour faire un truc unique pour les deux
cibles (windows et unices) je suis intéréssé, par contre il faut que ca
reste sur un modele relationnel.
Ma question est donc : comment attaquer firebird desktop avec python
sans partir dans du win32.
Ma question est donc : comment attaquer firebird desktop avec python sans partir dans du win32.
Et ce truc là ? http://vsbabu.org/mt/archives/2003/05/23/quick_start_firebird_on_windows.html
hg
William Dode
On 20-05-2007, hg wrote:
Bogdahn wrote:
FK
Tu devrais lire celà: http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers
C'est curieux que sqlite ne traite toujours pas les FK, surtout qu'ils reconnait la syntaxe et qu'il pourrait ne serait-ce que générer les triggers qui vont bien. Quelqu'un sait pourquoi ce n'est pas le cas ou si c'est prévu ? Pareil pour les autres "petits trucs" comme retirer un champ d'une table etc...
-- William Dodé - http://flibuste.net Développeur informatique indépendant
On 20-05-2007, hg wrote:
Bogdahn wrote:
FK
Tu devrais lire celà:
http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers
C'est curieux que sqlite ne traite toujours pas les FK, surtout qu'ils
reconnait la syntaxe et qu'il pourrait ne serait-ce que générer les
triggers qui vont bien. Quelqu'un sait pourquoi ce n'est pas le cas ou
si c'est prévu ?
Pareil pour les autres "petits trucs" comme retirer un champ d'une table
etc...
--
William Dodé - http://flibuste.net
Développeur informatique indépendant
Tu devrais lire celà: http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers
C'est curieux que sqlite ne traite toujours pas les FK, surtout qu'ils reconnait la syntaxe et qu'il pourrait ne serait-ce que générer les triggers qui vont bien. Quelqu'un sait pourquoi ce n'est pas le cas ou si c'est prévu ? Pareil pour les autres "petits trucs" comme retirer un champ d'une table etc...
-- William Dodé - http://flibuste.net Développeur informatique indépendant
Bogdahn
Bogdahn wrote:
FK
Tu devrais lire celà: http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers
hg
Bonjour,
J'ai deja lu ce document, pour preuve je vais m'auto-quote : Bogdahn à écrit : "mais sqlite ne gere pas les FK, faut les coder en trigger"
J'ai quand meme pas mal regardé du coté sqlite, c'est un sgbd que j'apprecie bcp, bien plus que les Access et autres (meme si on peut pas vraiment parler de sgbd), mais il y a des limitations, qu'on peut pallier en code certe, mais tant qu'a faire je prefere prendre un sgbd plus adapté c'est pour ca que j'ai regardé du coté de firebird.
Merci tout de meme :)
Bogdahn wrote:
FK
Tu devrais lire celà:
http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers
hg
Bonjour,
J'ai deja lu ce document, pour preuve je vais m'auto-quote :
Bogdahn à écrit : "mais sqlite ne gere pas les FK, faut les coder en
trigger"
J'ai quand meme pas mal regardé du coté sqlite, c'est un sgbd que
j'apprecie bcp, bien plus que les Access et autres (meme si on peut pas
vraiment parler de sgbd), mais il y a des limitations, qu'on peut
pallier en code certe, mais tant qu'a faire je prefere prendre un sgbd
plus adapté c'est pour ca que j'ai regardé du coté de firebird.
Tu devrais lire celà: http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers
hg
Bonjour,
J'ai deja lu ce document, pour preuve je vais m'auto-quote : Bogdahn à écrit : "mais sqlite ne gere pas les FK, faut les coder en trigger"
J'ai quand meme pas mal regardé du coté sqlite, c'est un sgbd que j'apprecie bcp, bien plus que les Access et autres (meme si on peut pas vraiment parler de sgbd), mais il y a des limitations, qu'on peut pallier en code certe, mais tant qu'a faire je prefere prendre un sgbd plus adapté c'est pour ca que j'ai regardé du coté de firebird.
Merci tout de meme :)
Bogdahn
C'est curieux que sqlite ne traite toujours pas les FK, surtout qu'ils reconnait la syntaxe et qu'il pourrait ne serait-ce que générer les triggers qui vont bien. Quelqu'un sait pourquoi ce n'est pas le cas ou si c'est prévu ? Pareil pour les autres "petits trucs" comme retirer un champ d'une table etc...
A mon avis c'est a cause du but du logiciel. Sqlite n'est pas un sgbd au plein sens du terme, il est concu pour etre un replacement des fonctions de maniputations de fichier, le sql est un langage extrement pratique et simplifie grandement la vie, sqlite permet d'avoir cette simplicité dans un programme en embarqué, l'objectif est donc different. Supporter les FK va prendre beaucoup de ressources (regardez la difference entre innodb et myisam par exemple) tout en etant peu utile pour le but premier du logiciel. Pour ce qui est de retirer un champ d'une table, c'est deja faisable, des scripts comme Sqlitemanger le font...C'est de la bidouille, comme les FK par trigger.
Je pense d'ailleur que le but de l'auteur du logiciel etait d'avoir un moteur le plus rapide possible et qu'il laisse aux utilisateurs avancés l'oportunité d'aller plus loin, d'où les triggers évolués, c'est vrai qu'on peut vraiment faire beaucoup de choses avec : FK, typage (pas preset dans sqlite de base) etc.
C'est curieux que sqlite ne traite toujours pas les FK, surtout qu'ils
reconnait la syntaxe et qu'il pourrait ne serait-ce que générer les
triggers qui vont bien. Quelqu'un sait pourquoi ce n'est pas le cas ou
si c'est prévu ?
Pareil pour les autres "petits trucs" comme retirer un champ d'une table
etc...
A mon avis c'est a cause du but du logiciel. Sqlite n'est pas un sgbd
au plein sens du terme, il est concu pour etre un replacement des
fonctions de maniputations de fichier, le sql est un langage extrement
pratique et simplifie grandement la vie, sqlite permet d'avoir cette
simplicité dans un programme en embarqué, l'objectif est donc
different. Supporter les FK va prendre beaucoup de ressources (regardez
la difference entre innodb et myisam par exemple) tout en etant peu
utile pour le but premier du logiciel. Pour ce qui est de retirer un
champ d'une table, c'est deja faisable, des scripts comme Sqlitemanger
le font...C'est de la bidouille, comme les FK par trigger.
Je pense d'ailleur que le but de l'auteur du logiciel etait d'avoir un
moteur le plus rapide possible et qu'il laisse aux utilisateurs avancés
l'oportunité d'aller plus loin, d'où les triggers évolués, c'est vrai
qu'on peut vraiment faire beaucoup de choses avec : FK, typage (pas
preset dans sqlite de base) etc.
C'est curieux que sqlite ne traite toujours pas les FK, surtout qu'ils reconnait la syntaxe et qu'il pourrait ne serait-ce que générer les triggers qui vont bien. Quelqu'un sait pourquoi ce n'est pas le cas ou si c'est prévu ? Pareil pour les autres "petits trucs" comme retirer un champ d'une table etc...
A mon avis c'est a cause du but du logiciel. Sqlite n'est pas un sgbd au plein sens du terme, il est concu pour etre un replacement des fonctions de maniputations de fichier, le sql est un langage extrement pratique et simplifie grandement la vie, sqlite permet d'avoir cette simplicité dans un programme en embarqué, l'objectif est donc different. Supporter les FK va prendre beaucoup de ressources (regardez la difference entre innodb et myisam par exemple) tout en etant peu utile pour le but premier du logiciel. Pour ce qui est de retirer un champ d'une table, c'est deja faisable, des scripts comme Sqlitemanger le font...C'est de la bidouille, comme les FK par trigger.
Je pense d'ailleur que le but de l'auteur du logiciel etait d'avoir un moteur le plus rapide possible et qu'il laisse aux utilisateurs avancés l'oportunité d'aller plus loin, d'où les triggers évolués, c'est vrai qu'on peut vraiment faire beaucoup de choses avec : FK, typage (pas preset dans sqlite de base) etc.
MCI, Shadok Gouroudoudou
Bonsoir !
Une appli avec seulement une douzaine de tables a-t'elle besoin d'un vrai SGBD ?
Pour ce genre de "petite appli" (je te cite), il ne doit pas y avoir plus de quelques milliers d'enregistrements.
Du coup, tu pourrais envisager de gérer ça dans une structure de dictionnaires.
Pierre Quentel, qui passe par ici de temps à autre, avait d'ailleurs réalisé une classe pour gérer ce genre de choses. Certes, il n'y a pas de SQL, mais il utilise les listes en intention pour effectuer des requêtes. Ce petit module pourrait servir de base (je crois que son nom était PyDBlite, ou qq chose comme ça).
-- @-salutations
Michel Claveau
Bonsoir !
Une appli avec seulement une douzaine de tables a-t'elle besoin d'un
vrai SGBD ?
Pour ce genre de "petite appli" (je te cite), il ne doit pas y avoir
plus de quelques milliers d'enregistrements.
Du coup, tu pourrais envisager de gérer ça dans une structure de
dictionnaires.
Pierre Quentel, qui passe par ici de temps à autre, avait d'ailleurs
réalisé une classe pour gérer ce genre de choses.
Certes, il n'y a pas de SQL, mais il utilise les listes en intention
pour effectuer des requêtes.
Ce petit module pourrait servir de base (je crois que son nom était
PyDBlite, ou qq chose comme ça).
Une appli avec seulement une douzaine de tables a-t'elle besoin d'un vrai SGBD ?
Pour ce genre de "petite appli" (je te cite), il ne doit pas y avoir plus de quelques milliers d'enregistrements.
Du coup, tu pourrais envisager de gérer ça dans une structure de dictionnaires.
Pierre Quentel, qui passe par ici de temps à autre, avait d'ailleurs réalisé une classe pour gérer ce genre de choses. Certes, il n'y a pas de SQL, mais il utilise les listes en intention pour effectuer des requêtes. Ce petit module pourrait servir de base (je crois que son nom était PyDBlite, ou qq chose comme ça).
-- @-salutations
Michel Claveau
jean-michel bain-cornu
Une appli avec seulement une douzaine de tables a-t'elle besoin d'un vrai SGBD ?
Pour ce genre de "petite appli" (je te cite), il ne doit pas y avoir plus de quelques milliers d'enregistrements.
Du coup, tu pourrais envisager de gérer ça dans une structure de dictionnaires.
Le fait qu'il y ait peu de tables ou que l'appli soit petite n'enlève rien au besoin d'un SGBD. Dans mon soft de gestion de la demande (wxQueries), je n'en ai pas beaucoup plus et je ne vois pas comment je pourrais me passer des jointures SQL.
Exemple : je veux la liste des demandes par client entre telle et telle date avec en prime le nombre d'événements associés à chaque demande. En SQL, ça fait deux lignes. Comment faire avec un dico ? Ta réponse m'intéresse par avance...
Une appli avec seulement une douzaine de tables a-t'elle besoin d'un
vrai SGBD ?
Pour ce genre de "petite appli" (je te cite), il ne doit pas y avoir
plus de quelques milliers d'enregistrements.
Du coup, tu pourrais envisager de gérer ça dans une structure de
dictionnaires.
Le fait qu'il y ait peu de tables ou que l'appli soit petite n'enlève
rien au besoin d'un SGBD.
Dans mon soft de gestion de la demande (wxQueries), je n'en ai pas
beaucoup plus et je ne vois pas comment je pourrais me passer des
jointures SQL.
Exemple : je veux la liste des demandes par client entre telle et telle
date avec en prime le nombre d'événements associés à chaque demande. En
SQL, ça fait deux lignes. Comment faire avec un dico ? Ta réponse
m'intéresse par avance...
Une appli avec seulement une douzaine de tables a-t'elle besoin d'un vrai SGBD ?
Pour ce genre de "petite appli" (je te cite), il ne doit pas y avoir plus de quelques milliers d'enregistrements.
Du coup, tu pourrais envisager de gérer ça dans une structure de dictionnaires.
Le fait qu'il y ait peu de tables ou que l'appli soit petite n'enlève rien au besoin d'un SGBD. Dans mon soft de gestion de la demande (wxQueries), je n'en ai pas beaucoup plus et je ne vois pas comment je pourrais me passer des jointures SQL.
Exemple : je veux la liste des demandes par client entre telle et telle date avec en prime le nombre d'événements associés à chaque demande. En SQL, ça fait deux lignes. Comment faire avec un dico ? Ta réponse m'intéresse par avance...
#------------------------------------------------------------------- # selection demandes > 070503 et < 070504 et comptage evenements #-------------------------------------------------------------------
#---Methode 1------------------------------ ddsel=[i for i in dd if dd[i]['date']> 070503 and dd[i]['date']< 070504] evsel=[ev[i]['demande'] for i in ev] for dem in ddsel: print "Demande",dem," Nb",evsel.count(dem),' Data :',dd[dem]
print
#---Methode 2------------------------------ ddsel=[i for i in dd if dd[i]['date']> 070503 and dd[i]['date']< 070504] evsel=[ev[i]['demande'] for i in ev if ev[i]['demande']in ddsel] for dem in ddsel: print "Demande",dem," Nb",evsel.count(dem),' Data :',dd[dem]
#-------------------------------------------------------------------
# selection demandes > 070503 et < 070504 et comptage evenements
#-------------------------------------------------------------------
#---Methode 1------------------------------
ddsel=[i for i in dd if dd[i]['date']> 070503 and
dd[i]['date']< 070504]
evsel=[ev[i]['demande'] for i in ev]
for dem in ddsel:
print "Demande",dem," Nb",evsel.count(dem),' Data :',dd[dem]
print
#---Methode 2------------------------------
ddsel=[i for i in dd if dd[i]['date']> 070503 and
dd[i]['date']< 070504]
evsel=[ev[i]['demande'] for i in ev if ev[i]['demande']in ddsel]
for dem in ddsel:
print "Demande",dem," Nb",evsel.count(dem),' Data :',dd[dem]
#------------------------------------------------------------------- # selection demandes > 070503 et < 070504 et comptage evenements #-------------------------------------------------------------------
#---Methode 1------------------------------ ddsel=[i for i in dd if dd[i]['date']> 070503 and dd[i]['date']< 070504] evsel=[ev[i]['demande'] for i in ev] for dem in ddsel: print "Demande",dem," Nb",evsel.count(dem),' Data :',dd[dem]
print
#---Methode 2------------------------------ ddsel=[i for i in dd if dd[i]['date']> 070503 and dd[i]['date']< 070504] evsel=[ev[i]['demande'] for i in ev if ev[i]['demande']in ddsel] for dem in ddsel: print "Demande",dem," Nb",evsel.count(dem),' Data :',dd[dem]
-- @-salutations
Michel Claveau
Bogdahn
Bogdahn wrote:
Ma question est donc : comment attaquer firebird desktop avec python sans partir dans du win32.
Et ce truc là ? http://vsbabu.org/mt/archives/2003/05/23/quick_start_firebird_on_windows.html
hg
Il s'agit de la version serveur, je cherche des infos pour interfacer avec la version desktop (en une dll).
Merci pour ton aide.
Bogdahn wrote:
Ma question est donc : comment attaquer firebird desktop avec python
sans partir dans du win32.
Et ce truc là ?
http://vsbabu.org/mt/archives/2003/05/23/quick_start_firebird_on_windows.html
hg
Il s'agit de la version serveur, je cherche des infos pour interfacer
avec la version desktop (en une dll).
Ma question est donc : comment attaquer firebird desktop avec python sans partir dans du win32.
Et ce truc là ? http://vsbabu.org/mt/archives/2003/05/23/quick_start_firebird_on_windows.html
hg
Il s'agit de la version serveur, je cherche des infos pour interfacer avec la version desktop (en une dll).
Merci pour ton aide.
MCI, Shadok Gouroudoudou
Re !
On peut facilement définir une fonction qui comptera, sur une "jointure".
Cette fonction, définie une fois pour toutes, pourrait servir de modèle, pour réaliser toutes sortes de traitements de jointures, voire, même, d'intégrité référentielle.
def selcount(table, champ, jointure, selection): nb=dict(zip(selection,[0]*len(selection))) for r in table: if table[r][jointure] in selection: nb[table[r][champ]]+=1 return nb
ddsel=[i for i in dd if dd[i]['date']> 070503 and dd[i]['date']< 070504] compt=selcount( ev, 'demande', 'demande', ddsel) for dem in ddsel: print "Nb :",compt[dem],' Data :',dd[dem]
-- @-salutations
Michel Claveau
Re !
On peut facilement définir une fonction qui comptera, sur une
"jointure".
Cette fonction, définie une fois pour toutes, pourrait servir de
modèle, pour réaliser toutes sortes de traitements de jointures, voire,
même, d'intégrité référentielle.
def selcount(table, champ, jointure, selection):
nb=dict(zip(selection,[0]*len(selection)))
for r in table:
if table[r][jointure] in selection:
nb[table[r][champ]]+=1
return nb
ddsel=[i for i in dd if dd[i]['date']> 070503 and
dd[i]['date']< 070504]
compt=selcount( ev, 'demande', 'demande', ddsel)
for dem in ddsel:
print "Nb :",compt[dem],' Data :',dd[dem]
On peut facilement définir une fonction qui comptera, sur une "jointure".
Cette fonction, définie une fois pour toutes, pourrait servir de modèle, pour réaliser toutes sortes de traitements de jointures, voire, même, d'intégrité référentielle.
def selcount(table, champ, jointure, selection): nb=dict(zip(selection,[0]*len(selection))) for r in table: if table[r][jointure] in selection: nb[table[r][champ]]+=1 return nb
ddsel=[i for i in dd if dd[i]['date']> 070503 and dd[i]['date']< 070504] compt=selcount( ev, 'demande', 'demande', ddsel) for dem in ddsel: print "Nb :",compt[dem],' Data :',dd[dem]