Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


[Demande] SQL Lite
#1
Bonsoir/Bonjour

Voilà je me penche sur un code en SQL en ce moment, mais je recherche toutes alternatives à ce qui rapporte SQL.

J'ai regarder sur le wiki donc : https://wiki.eggdrop.fr/index.php?title=...ql&go=Lire

Et j'ai vus sqlite. Et je doit avouer que je n'es pas compris la totalité de l'explication du tuto.., si quelqu'un aurait un exemple "je ne cherche pas un code tout fait hein" Mais juste un exemple d'une proc bidons juste pour mieux comprendre l'outil et son utilisation si possible.

Je vous remercie d'avance !
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#2
Yop  aliasangelius,
Le lien de ta signature ne fonctionne pas .

sqlite3 c'est un moteur de base de données comme MySQL, par contre il est sous forme de fichier (db fichier) ca a comme avantage que si le package sqlite3 est installer, il ne faut pas installer de "serveur" et sa rend sa portabilités plus intéressant.

Un bon compris entre facilité de fichier, un peu de puissance coté "SQL" .

Pour commencer tu charge la librairie
Code :
package require sqlite3

ensuite tu cree une connexion (pipeline/handler/session) avec

Citation :sqlite3 <nom_de_session> <chemin_du_fichier_db>

le nom de session: est le nom de l'instance au quel tu fera a chaque fois appelle pour communiquer avec ta base sqlite
le chemin du fichier db est simplement le chemin ou tu veux que la abse de donner creer le fichier qui stockera tes données

en gros : 'sqlite3 db1 databases/biblio.db' te créera ton instance db1 qui lira/écrira dans le fichier databases/biblio.db

Pour le reste sa ressemble a MySQL, tu exécute ta création de structure db avec "create table ..."
imaginon tu veux créer une table auteur, avec dedans deux colonnes aut_id  et aut_auteur :

CREATE TABLE auteur (
    aut_id integer primary key,
    aut_auteur text
)

pour exécuté tu utilise ton instance 'db1' avec la commande 'eval' :
Code :
    db1 eval { ..execute ceci..}
C'est à dire :
Code :
    db1 eval {CREATE TABLE auteur (aut_id integer primary key, aut_auteur text)}

C'est pareil pour tes requêtes INSERT :
Code :
    db1 eval {INSERT INTO auteur (aut_id, aut_auteur) VALUES (1, "Pierre Bordage")}

Pour les select c'est pareil mais du doit stocker/utiliser le retour evidement
Code :
   set SQL_RESULTAT [db1 eval {SELECT (aut_id, aut_auteur FROM auteur}]
   putlog $SQL_RESULTAT
ou ...
Code :
    db1 eval {SELECT (aut_id, aut_auteur FROM auteur} {
         putlog "Id Auteur : $aut_id, Auteur : $aut_auteur"
    }
ou par example avec foreach ...
Code :
    foreach { ID AUTEUR } [ db1 eval {SELECT (aut_id, aut_auteur FROM auteur}] {
                   putlog "Id Auteur : $ID, Auteur : $AUTEUR "
    }

tu peu encore trouver des informations ici :
http://wfr.tcl-lang.org/1896
tu peu trouver les commandes comme eval ici : https://www.sqlite.org/tclsqlite.html

En espérant que cela répond a tes questions et t'éclairé un peu. Effectivement il manque une documentation importante en tcl.
Pourtant SQLiTE3 est très intéressant. il est souvent utiliser (en dehors du cadre TCL) dans beaucoup d'application comme base de données interne!

Je t'invite à compléter le wiki par tes propres découvertes, test, exemples  que ca puisse profité a tous.
  Répondre
#3
Yop @mcdeffice !

Tout d'abord je te remercie d'avoirs pris le temps de répondre avec autant de détails !

Et en effet tu répond à certaines de mes questions, De base de voulais passer par SQL pour faire un TCL relié entre plusieurs eggdrop "sans passer par botnet".

Et là le SQLITE3, c'est comme du traitement de fichier d'eggdrop mais avec la fonction SQL en partie.. Violent.

Je vais faire mes test, et les recherche et en effet si celà aboutis je vais remplir avec grand plaisirs le wiki
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#4
(10/11/2020, 13:50)aliasangelius a écrit : De base de voulais passer par SQL pour faire un TCL relié entre plusieurs eggdrop "sans passer par botnet".
Déjà, attention: SQLite est un système assez basique, tu peux avoir plusieurs connexions ouvertes en lecture mais une seule à la fois en écriture.

(10/11/2020, 13:50)aliasangelius a écrit : Et là le SQLITE3, c'est comme du traitement de fichier d'eggdrop mais avec la fonction SQL en partie.. Violent
Non. Ou alors, tout n'est que du fichier.
SQLite3 est un moteur de bases de données, au même titre que pgsql, MySQL ou SQLServer ou DBase3. D'ailleurs, tu ne pourras pas lire un fichier sqlite3 dans un éditeur texte.

Au cas où, un début d'utilisation de sqlite en tcl existe sur https://gitlab.com/tcl-scripts/games/egg-rpg
  Répondre
#5
Bonjour CrazyCat,

Merci pour ta réponse.

Alors je vais expliquer ce que je cherche, mais je pense que ce que je veut ne sera pas adaptable du coup avec SQLite3.

Je vais avoir "bot principal", qui sera pour la gestion des accès, celui la même dira aux bot "01-02 etc" si $nick est bien dans la liste des accès sur tel salon.
S'il retourne donc la réponse "ok", alors so good.

De même les bot "01-02", seront inclus des commandes de base des salon avec quelques trucs en plus pour de la modération, le tout avec vérification bien évidament.

Alors si je lis bien ce que tu as dit, SQLite3, ne serait pas l'idéal dans ce type de projet TCL, mieux vaut que je penche sur MYSQLTCL qui serait plus éfficace en therme de gestion etc ?

J'ai regarder le lien que tu à mis, et je pense que ce ne sera pas tout à fait l'idéal, du moins de mon ressenti, je préfère demander confirmation.
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#6
J'avoue que je ne comprends pas ton principe.
Tu veux relier des eggdrops sans botnet mais ce serait ton bot principal qui transmettrait aux autres les infos de la base de données... Du coup, les limitations qu'il peut y avoir sur l'écriture concomitante ne te concernent pas.
Dans tous les cas, si tu as un eggdrop principal qui est le seul à écrire, les autres peuvent lire la base sans problème.

Je ne vois clairement pas les soucis que tu as.

Tu devrais d'abord bien réfléchir à ce que tu veux faire et comment sur le principe et après chercher des solutions techniques.
  Répondre
#7
Ce que tonton CrazyCat dit, c'est que si ta plusieurs eggdrop qui charge la meme base de données SQLiTE3, un seul pourra écrire dans cette base a la fois..

J'ai pas tout compris de ton concept, mais il semblerai que sa change rien même si non connecter en botnet car tu aura un master (écriture) et tes slaves bot 01,02... (lecture) le problème ne ce pose pas (c'est l'aspect "fichier" de SQLiTE3)
  Répondre
#8
Je vais mieux expliquer, car en effet niveau compréhension ce n'es pas le top.

Alors je vais Utiliser 4 Eggdrops, chaque eggdrop aura une fonction propre ! Exemple :

Eggdrop = Bot principal
Eggdrop-01 = Bot Salon
Eggdrop-02 = Bot Salon
Eggdrop-Log = Service chanlog

Nous avons donc 4 Eggdrops, 4 fonctions différentes.
Bien qu'un eggdrop pour chanlog ne soit pas utile tu me diras, mais j'aime bien voir ce qui se passe, et rendre plus léger un eggdrop et ce que je désire.
Ceci resterais qu'un puthelp tu me diras, mais 1 +1 +1.. Bref.

Après pour ta question sur le fait de relier des eggdrops sans botnet.

J'ai repris le code de auth sur le wiki pour le SQL, donc les personnes qui voudrons se auth passeront par Eggdrop, et Eggdrop-log diras blabla c'est auth.

La ou ce système aura une grande importance, et lors des exécutions des tâches tel qu'une personne ayant un accès sur #eggdrop par exemple voudra faire !op
Donc ici ont aura soit Eggdrop-01 ou le 02 peut importe.

Eggdrop-01 va donc vérifié si intel et authentifié auprès su service, et sur la base SQL.
Je ferais donc une proc dans un TCL à part qui va en réunirs plusieurs.

Eggdrop-01 va envoyé un message à Eggdrop, lui demandant de vérifié si $nick est autorisé à utilisé le service sur le salon, et si cette dernière et authentifié auprès de ce service même.
Suite à ça Eggdrop diras oui ou non, et donc la suite des conditions prenne la suite.

Je suis d'accord sur le fait de bien réfléchir à ce genre de système, je t'avoue que même mon explication pour toi peut paraître très confuse, elle l'es encore pour moi actuellement.
Mais je bosse sur ce genre de projet que j'aimerais bien faire, Je décide de ne pas utiliser le système de botnet pour 2 raisons.

1) J'ai franchement la flemme de passer du temps à expliquer comment l'installer
2) Je devrais fusionner plusieurs post et inclure ton chanrelay dans le système et je ne suis pas très chaud à cette idée là

Le seul soucis que je dispose c'est pas la mise en place réel, mais ma compréhension sur le principe du système.
C'est idiot, mais j'ai l'impression d'oublier certains détails important, j'ai lus les passages dans le wiki, ainsi que tout les post (ou presque) disponible sur eggdrop.fr
Histoire de me faire une idée, ou quelque chose qui s'en approche, mais je pense pas avoirs vus cette solution ou alors je me complique trop pour pas grand chose aussi.

Voilà en espérant que ce message te réponde correctement, et que tu puisse voir ce que je pense faire.

En tout cas merci de t'es réponses elle sont bien reçus.
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#9
Ce que je ne comprends pas, c'est pourquoi tu veux que tes eggdrops esclaves demandent au maitre d'interroger la base.
Ils peuvent très bien le faire seuls, c'est juste de la lecture. Et ce que tu veux faire implique une communication entre les eggdrops (par un canal, en MP, par botnet, ...).

Pourquoi est-ce que le maître ne serait pas juste responsable des données (il écrit dans la base) et les esclaves vont interroger la base pour récupérer les infos dont tu as besoin.
En plus ton idée fait travailler les eggdrops beaucoup plus que si tu n'en avais qu'un seul vu que tu vas avoir (par exemple) nick qui s'enregistre auprès du maître, puis nick demande un truc à esclave1 qui va demander confirmation à maitre, maitre va répondre à esclave1 qui va répondre à nick... Quelle usine à gaz.
  Répondre
#10
Ah oui en effet je n'avais pas vus le problème sous cet angle ci.

Mais oui pour de la lecture, ils pourrait le faire seul, et seul le maître serait à écrire, le restant en lecture.

En tout cas ça répond correctement à ce que je cherche, et j'étais partis trop loin dans la complexité de la chose alors qu'au final non :)

Merci pour les réponses détaillés fournis par vous, ça m'as beaucoup aidez à y voir plus clair
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)