Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι
  • Σελίδα:
  • 1
  • 2

ΘΕΜΑ: Project : Αποδείξεις - Βάση δεδομένων

Project : Αποδείξεις - Βάση δεδομένων 13 Χρόνια 10 Μήνες πριν #1154

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Ανεβάζω τη βάση που έχω δημιουργήσει για προσωπική χρήση και πιστεύω πως μπορεί να φανεί χρήσιμη για το project apodikseis. Είναι σε sqlite3.

Συνημμένο αρχείο:

Όνομα Αρχείου: apodixis.gz
Μέγεθος αρχείου:1 KB
Γράφω σε Python 3
Τελευταία διόρθωση: 13 Χρόνια 9 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": pmav99

Απ: Αποδείξεις - Πρόταση για βάση. 13 Χρόνια 10 Μήνες πριν #1158

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Πολύ πολύ σύντομα. Θα επανέλθω πιο αναλυτικά το ΣΚ (αν δεν το κάνει κανείς άλλος νωρίτερα)

Sqlite tutorial ΕΔΩ (Θα βρείτε και πολλά άλλα αν ψάξετε).

Σχετική ιστοσελίδα για Python ΕΔΩ

Η database που ανέβασε ο kamar περιέχει 4 tables. Tα:

* apodixis
* eidos_agoras
* epixirisis
* stocks

Για να ανοίξουμε την db μέσα από python αρκεί το παρακάτω.
import sqlite3
 
conn = sqlite3.connect("path/to/apodixis.db")
 
c = conn.cursor()
 
c.execute("SQL command")

Όποιος θέλει ας γράψει κώδικα για το πως προσθέτουμε πίνακες, πως προσθέτουμε δεδομενα και πως κάνουμε ερωτήματα (Query).
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Αποδείξεις - Πρόταση για βάση. 13 Χρόνια 10 Μήνες πριν #1159

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Δημιουργία πίνακα:
import sqlite3 
 
databaseonoma="/h/diadromi/apodixis.db"
 
syndesi = sqlite3.connect(databaseonoma) 
 
curr = syndesi.cursor() 
 
curr.execute("""
    CREATE TABLE [epixirisis] (
        [afm] VARCHAR NOT NULL UNIQUE ON CONFLICT FAIL,
        [doy] VARCHAR NOT NULL,
        [eponimia] VARCHAR NOT NULL,
        [dieythinsi] VARCHAR NOT NULL,
        [thlefono] VARCHAR,
        PRIMARY KEY ([afm]))
        """)
 
syndesi.commit() 
 
syndesi.close()   
 

Επεξήγηση:

import sqlite3 --> Εισάγουμε το module της sqlite3.

databaseonoma='/h/diadromi/apodixis.db' --> Ορίζουμε τη διαδρομή της βάσης. Αν αυτή δεν υπάρχει δημιουργείται.

syndesi = sqlite3.connect(databaseonoma) --> Δημιουργούμε τη σύνδεση της βάσης με τη sqlite3.

curr = syndesi.cursor() --> Δημιουργούμε το αντικείμενο cursor.

curr.execute("""CREATE .... """) --> Εκτελούμε το ερώτημα δημιουργίας του πίνακα των επιχειρήσεων. Έχω ορίσει όλα τα πεδία ως VARCHAR για εξοικονόμηση χώρου και ελαστικότητα στις τιμές που θα δώσουμε.

ON CONFLICT FAIL --> Δηλώνει ότι αν το ΑΦΜ υπάρχει ήδη στον πίνακα όταν θα εισάγουμε εγγραφές η εισαγωγή θα αποτύχει.

PRIMARY KEY ([afm]) --> Ορίζουμε το ΑΦΜ ως μοναδικό κλειδί του πίνακα (κάθε επιχειρήση ή φυσικό πρόσωπο έχει μόνο ένα ΑΦΜ. Έτσι δεν είναι; :) ).

syndesi.commit() --> Κάνουμε commit το ερώτημα για να αποθηκευτεί. Αν δεν γίνει πιθανόν να μη δημιουργηθεί ο πίνακας.

syndesi.close() --> Κλείνουμε τη σύνδεση.
Γράφω σε Python 3
Τελευταία διόρθωση: 13 Χρόνια 10 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": pmav99

Απ: Αποδείξεις - Πρόταση για βάση. 13 Χρόνια 10 Μήνες πριν #1160

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Ευχαριστούμε πολύ camar!

άλλαξα λίγο το identation για να είναι πιο ευανάγνωστος ο κώδικας.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Αποδείξεις - Πρόταση για βάση. 13 Χρόνια 9 Μήνες πριν #1189

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Έκανα μια μίνι κλάση - wrapper στο pySQLite.

Μπορείτε να τη βρείτε ΕΔΩ. Προσπάθησα να κάνω την αλληλεπίδραση με την SQL όσο γίνεται πιο pythonic...

Απλά τρέχετε το αρχείο test.py. Οποιοδήποτε σχόλιο ή παρατήρηση ευχαρίστως να το ακούσω.

Γενικές Παρατηρήσεις

1. Αντί για Null δίνουμε None στην Python.
2. Είναι πιο εύκολο να δημιουργούμε μια και καλή τους πίνακες και να μην προσθέτουμε στήλες στη συνέχεια.
3. Δουλεύει με Python 2. Λογικά θα δουλεύει και με Python 3 αν αφαιρεθούν τα "u" (unicode prefixes).
4. Δουλεύει και με Ελληνικά.

Στο project δεν είναι ανάγκη να χρησιμοποιηθεί, καθώς οι ανάγκες μας είναι πολύ μικρές. Πρακτικά μόνο insert values, update values και query έχουμε να κάνουμε.
Τελευταία διόρθωση: 13 Χρόνια 9 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Αποδείξεις - Πρόταση για βάση. 13 Χρόνια 9 Μήνες πριν #1191

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Έχω αυτό το σφάλμα:
~/pysqlite-wrapper$ python test.py
Traceback (most recent call last):
  File "test.py", line 20, in <module>
    from sqlite_wrapper import SQLite3_DataBAse
ImportError: cannot import name SQLite3_DataBAse

Θέλει αλλαγή το SQLite3_DataBAse σε SQLite3_DataBase.
Επίσης έχω πρόβλημα με το encoding, κάτι που δεν το έχω με Python3.
Traceback (most recent call last):
  File "/home/kostas/pysqlite-wrapper/test.py", line 69, in <module>
    db = main()
  File "/home/kostas/pysqlite-wrapper/test.py", line 42, in main
    db.create_table(u"Επιχειρήσεις", columns_1)
  File "/home/kostas/pysqlite-wrapper/sqlite_wrapper.py", line 143, in
create_table
    s = """create table {0}({1});""".format(t_name, s)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 
0-11: ordinal not in range(128)

Δουλεύει με Python 2. Λογικά θα δουλεύει και με Python 3 αν αφαιρεθούν τα "u" (unicode prefixes).
2to3 -w sqlite_wrapper.py
 2to3 -w test.py
Δημιουργεί αυτόματα αρχεία σε python3, με απλές συναρτήσεις. Επίσης δημιουργεί ένα αντίγραφο του αρχείου.
Γράφω σε Python 3
Τελευταία διόρθωση: 13 Χρόνια 9 Μήνες πριν από kamar.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Αποδείξεις - Πρόταση για βάση. 13 Χρόνια 9 Μήνες πριν #1192

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Ευχαριστώ για το feedback.

Το όνομα της κλάσης το είδα και εγώ αφού το ανέβασα. Το διόρθωσα τώρα.

Σε python2 το δοκίμασα και έτρεξε μέσα από το console του spyder2. Από το bash όντως, δεν τρέχει. Μπορεί να είναι θέμα υποστήριξης του unicode από το shell, γιατί με αγγλικά ονόματα τρέχει κανονικά.

Σε python3 τρέχει χωρίς κανένα πρόβλημα μόλις γίνουν οι αλλαγές που προτείνει το 2to3.

Πλέον 2 αρχεία δοκιμής, ένα για python2 και ένα για python3.

Από εκεί και πέρα, κάποιο άλλο feature που πρέπει να προστεθεί? Δεν έχω πολυ ασχοληθεί με SQL και δε ξέρω τι άλλο συναντάται στην πράξη, που θα είναι πιο εύκολο να το κάνεις με python παρά με SQL.

Ούτως ή άλλως, όλες οι εντολες της SQL μπορούν να τρέξουν με db.execute() (όταν υπάρχει ένα μόνο όρισμα) ή db.curs.execute() (όταν υπάρχουν 2 ή περισσότερα ορίσματα).
Τελευταία διόρθωση: 13 Χρόνια 9 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Αποδείξεις - Πρόταση για βάση. 13 Χρόνια 9 Μήνες πριν #1193

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Εγώ το έτρεξα σε κονσόλα Ubuntu 64bit και IDLE, θα προσπαθήσω να βρω τι σφάλμα υπάρχει, αν και η πείρα μου λέει ότι σε τέτοια ζητήματα δύσκολα βρίσκεις απαντήσεις.

Όσο για τις δυνατότητες της κλάσης, βλέποντας και κάνοντας.:P

edit
File "/home/kostas/pysqlite-wrapper/sqlite_wrapper.py", line 143, in
create_table
    s = """create table {0}({1});""".format(t_name, s)
Αν αντικατασταθεί το
t_name
με το:
t_name.encode('utf-8')
διορθώνεται το πρόβλημα.
Πάντως θέλει διεξοδικό ψάξιμο.
Γράφω σε Python 3
Τελευταία διόρθωση: 13 Χρόνια 9 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Αποδείξεις - Βάση δεδομένων 13 Χρόνια 9 Μήνες πριν #1197

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Μερικά ενδιαφέροντα links

Παλιό μεν, αλλά και αν δεν δουλεύει πιθανά να δώσει ιδέες : www.informit.com/articles/article.aspx?p=30649&seqNum=7

Νομίζω απόλυτα συναφές. Δεν το έχω δοκιμάσει αν δουλεύει : www.bawet.org/python_qt/Cours_python_Qt/data_base_widgets.pdf
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Project : Αποδείξεις - Γενικά 13 Χρόνια 9 Μήνες πριν #1200

  • Maximus
  • Το Άβαταρ του/της Maximus
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 32
Γεια σας και πάλι και από εμένα!

Για την ιστορία, για τον τρόπο που θα δουλεύουμε μου φαίνεται οτί το χαλαρό/μη τυπικό μοντέλο που πρότεινε ο pmav αρμόζει σε ένα μικρό project όπως αυτό και το βλέπω να λειτουργεί μια χαρά μέχρι στιγμής.

Τα δεδομένα λοιπόν σε πρώτη φάση είναι Επωνυμία, Διεύθυνση, ΑΦΜ/ΔΟΥ, Τηλέφωνο; Επειδή δεν έχω κάνει φορολογική δήλωση και δεν ξέρω, έχω κάποιες απορίες! Κατ'αρχήν, αυτά τα πεδία αναφέρονται στον χρήστη/πελάτη ή στην επιχείρηση από την οποία αγοράζει;

Από αυτά χρειάζεται validation μόνο το ΑΦΜ; Το αναφέρω γιατί η σημασία του data validation μεταβάλλεται ανάλογα με τα περιθώρια ανοχής σφαλμάτων.
Για τις ΔΟΥ θα εμφανίζουμε λίστα με επιλογές ή θα τις πληκτρολογεί ο χρήστης; Ακόμη και για το τηλέφωνο π.χ. αν είναι ιδιαίτερα σημαντικό να μην περαστεί λάθος, θα μπορούσαμε να ελέγχουμε να είναι σωστό το πρόθεμα (π.χ. 210 για Αθήνα και άλλα 7 ψηφία).

Επίσης, ποιά άλλα πεδία μπορεί να χρειαστούμε;

Τέλος, φαντάζομαι οτί θα χρειαστεί να γίνεται αναζήτηση στις αποδείξεις; Αυτή θα γίνεται με βάση την επωνυμία (της επιχείρησης);
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Project : Αποδείξεις - Γενικά 13 Χρόνια 9 Μήνες πριν #1204

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Τα πεδία στον ένα πίνακα της βάσης νομίζω ότι είναι:

Επωνυμία
Ιδιοκτήτης
ΑΦΜ
ΔΟΥ
Διεύθυνση
Τηλέφωνο

Αναφέρονται σε αυτόν που εκδίδει την απόδειξη. Επιπρόσθετα (σε άλλον πίνακα της βάσης) θέλεις να κρατάς και τα εξής:

Ποσό
Ημερομηνία
Ώρα (?)

Και στους 2 πίνακες θα έχεις και στήλες id.

Το πιο σημαντικό από όλα τα στοιχεία είναι το ΑΦΜ. Είναι αυτό που είναι μοναδικό. Συνωνόματοι υπάρχουν πολλοί. Όπως και επιχειρήσεις με το ίδιο όνομα (πχ Ταβέρνα "Τα Άγραφα"). ΑΦΜ έχουν όμως όλοι διαφορετικό. Ακόμα και λάθος στοιχεία να δωθούν (ή να μη φαίνονται στην απόδειξη) μέσω του ΑΦΜ μπορείς να αντιστοιχήσεις μονοσήμαντα ποιος εξέδωσε μια απόδειξη.

Πιστοποιώντας ότι ο αριθμός του ΑΦΜ που εισάγεται είναι έγκυρος, μειώνεις τις πιθανότητες να έχει γίνει τυπογραφικό λάθος. Εκτός και αν κανεις 2 ή περισσότερα λάθη και τύχει το τελικό άθροισμα να είναι το ίδιο. Ε, αυτήν την περίπτωση δε μπορούμε να την καλύψουμε.

Η ΔΟΥ μπορεί να γίνει με ένα combo box που σου δίνει κάποιες επιλογές (πχ αυτές που διαβάζει από τη λίστα), αλλά σου επιτρέπει να βάλεις και δική σου custοm τιμή. Σε πρώτη φάση νομίζω ότι καλό είναι να το αφήσουμε στην άκρη. Δεν είναι πρώτη προτεραιότητα.

Το πολύ validation σε περιορίζει κιόλας. Πιο σημαντικό είναι να μπορείς να κάνεις import και export τη λίστα. Σκέψου πχ ότι κάποιος έχει ήδη περασμένα στοιχεία στο excel και τα τηλέφωνα τα έγραφε 210.000.00.00 (ή παύλες ή κενα ή ...). Αν του πεις πρέπει να είναι integer ή μέχρι 10 χαρακτήρες, τον υποχρεώνεις να κάτσει να τα μετατρέψει και δεν το θελουμε αυτό.

Τα λαθη που θα γίνονται κατά την εισαγωγή των δεδομένων πρέπει να μπορούν να διορθώνονται. Δηλαδή να επιλέγεται μια καταχώρηση και να διορθώνει τα στοιχεία της (UPDATE στην SQL). Αυτό πρέπει να γίνει.
Τελευταία διόρθωση: 13 Χρόνια 9 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Project : Αποδείξεις - Γενικά 13 Χρόνια 9 Μήνες πριν #1206

  • bold
  • Το Άβαταρ του/της bold
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 4
στο 2ρο πινακα με τα πεδια
Ποσό
Ημερομηνία
Ώρα (?)

πρεπει να προσθεσουμε και ενα ακομα πεδιο με το "id επιχείρησής" ή αφμ ή επωνυμια (κατα προτίμησή... "id επιχείρησής" )
για να φαίνεται ποιος έκδωσε την αποδειξη
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Project : Αποδείξεις - Γενικά 13 Χρόνια 9 Μήνες πριν #1209

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
bold έγραψε:
στο 2ρο πινακα με τα πεδια
Ποσό
Ημερομηνία
Ώρα (?)

πρεπει να προσθεσουμε και ενα ακομα πεδιο με το "id επιχείρησής" ή αφμ ή επωνυμια (κατα προτίμησή... "id επιχείρησής" )
για να φαίνεται ποιος έκδωσε την αποδειξη
ΑΦΜ οπωσδήποτε για να συνδέεται η απόδειξη με τη συγκεκριμένη επιχείρηση.
Η ώρα αν θέλουμε τη βάζουμε. Η απόδειξη έχει κάποια αρίθμηση όπως βγαίνει από την ταμειακή και αυτό πρέπει να μπει οπωσδήποτε (κόβω δύο αποδείξεις από μια επιχείρηση την ίδια ώρα αλλά έχουν διαφορετικό αριθμό).
Επίσης πρέπει να μπει ένας αύξοντας αριθμός για να αρχειοθετείται η απόδειξη από το χρήστη.

Ρίξε μια ματιά εδώ
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Project : Βάση δεδομένων 13 Χρόνια 9 Μήνες πριν #1214

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
pmav99 έγραψε:
@ Bold
Ναι έχεις δίκιο. Πρέπει μάλιστα αυτό το πεδίο να μπει ως foreign key αν δεν κάνω λάθος.

Θα επιμείνω στο θέμα του ΑΦΜ. Το ΑΦΜ είναι το μοναδικό κλειδί για τις επιχειρήσεις καθώς επίσης το foreign key για τον πίνακα των αποδείξεων (Υλοποίηση ένα προς πολλά).
Το μοναδικό κλειδί για τις αποδείξεις είναι άλλο πράγμα. Θα είναι ένας συνδυασμός ΑΦΜ ΕΠΙΧΕΊΡΗΣΗΣ & ΑΡΙΘΜΌΣ ΑΠΟΔΕΙΞΗΣ & ΗΜΕΡΟΜΗΝΑ.
Η λογική και τα σενάρια:
Υπάρχει περίπτωση την ίδια μέρα να κόψεις δύο ή τρεις αποδείξεις από μια επιχείρηση. Το ΑΦΜ και η ημερομηνία μένουν ίδιες, ο αριθμός απόδειξης αλλάζει, άρα το κλειδί είναι μοναδικό.
Κόβεις μια απόδειξη το 2012 από την Χ επιχείρηση και συμπίπτει να έχει τον ίδιο αριθμό από την ίδια επιχείρηση του 2010. Έχουμε ίδιο ΑΦΜ, ίδιο αριθμό αλλά διαφορετική ημερομηνία. Το κλειδί είναι πάλι μοναδικό.
Τρίτο, κόβουμε από την Ψ επιχείρηση απόδειξη σήμερα και έχει τον ίδιο αριθμό από με μια απόδειξη που κόβουμε από την Χ και αυτή σήμερα (ίσως και την ίδια ώρα). Έχουμε ίδια ημερομηνία ίδιο αριθμό αλλά διαφορετικό ΑΦΜ. Το κλειδί είναι πάλι μοναδικό.
Γράφω σε Python 3
Τελευταία διόρθωση: 13 Χρόνια 9 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Project : Βάση δεδομένων 13 Χρόνια 9 Μήνες πριν #1243

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
@ Kamar

Μπορείς να ανεβάσεις τις εντολες της SQL που δημιουργούν αυτό το κλειδι?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
  • Σελίδα:
  • 1
  • 2
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.371 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου