# Τεκμηρίωση του Django - 1.10.7

# Συχνές Ερωτήσεις: Βάσεις δεδομένων και Μοντέλα

## Πως μπορώ να δω το SQL ερώτημα που κάνει το Django στο παρασκήνιο;

Σιγουρευτείτε ότι η ρύθμιση του Django `DEBUG` είναι `True`. Έπειτα, τρέξτε την εντολή python manage.py shell και γράψτε:

    >>> from django.db import connection
    >>> connection.queries
    [{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
    'time': '0.002'}]

Το `connection.queries` είναι διαθέσιμο μόνο αν η ρύθμιση `DEBUG` είναι `True`. Στην ουσία είναι μια λίστα από dictionaries με την σειρά που θα εκτελεστούν τα ερωτήματα. Κάθε dictionary περιέχει τα ακόλουθα:

    ``sql`` -- The raw SQL statement
    ``time`` -- How long the statement took to execute, in seconds.

Το `connection.queries` περιλαμβάνει όλες τις SQL εντολές – INSERTs, UPDATES, SELECTs, κλπ. Κάθε φορά που η εφαρμογή σας (ο κώδικας, αν θέλετε) αλληλεπιδρά με τη βάση δεδομένων η εντολή θα καταγράφεται.

Αν χρησιμοποιείτε πολλαπλές βάσεις δεδομένων, μπορείτε να χρησιμοποιείτε την ίδια μέθοδο αλλά αλλάζοντας το key του `connections` dictionary ούτως ώστε να ταιριάζει με το όνομα της βάσης δεδομένων σας:

    >>> from django.db import connections
    >>> connections['my_db_alias'].queries

Αν χρειαστεί να αδειάσετε χειροκίνητα τη λίστα με τα ερωτήματα δεν έχετε παρά να καλέσετε τη συνάρτηση `reset_queries()`, ως εξής:

    from django.db import reset_queries
    reset_queries()

## Μπορώ να χρησιμοποιήσω το Django με μια ήδη υπάρχουσα βάση δεδομένων;

Βεβαίως. Δείτε στο άρθρο Χρησιμοποιώντας μια υπάρχουσα βάση δεδομένων.

## Αν κάνω αλλαγές σε κάποιο μοντέλο, πως ενημερώνω τη βάση δεδομένων;

Ρίξτε μια ματιά στην υποστήριξη του Django για τα `schema migrations`.

Αν δεν ενδιαφέρεστε να διαγραφούν τα δεδομένα, το `manage.py` έχει την επιλογή `flush` η οποία επαναφέρει τη βάση δεδομένων στη κατάσταση που ήταν αμέσως μετά την εκτέλεση του `migrate`.

## Υποστηρίζουν τα Django μοντέλα primary keys πολλαπλών-στηλών;

Όχι. Υποστηρίζονται μόνο τα primary keys που ανήκουν σε μια στήλη.

Αλλά αυτό δεν αποτελεί σοβαρό θέμα στη πράξη, επειδή κανείς δε θα σας εμποδίσει από το να προσθέσετε και άλλα constraints (χρησιμοποιώντας την επιλογή του μοντέλου `unique_together` ή δημιουργώντας ένα constraint απ’ ευθείας στη βάση δεδομένων), ενισχύοντας στην ουσία την μοναδικότητα σε αυτό το επίπεδο. Τα μοναδικής-στήλης primary keys χρειάζονται για να δουλέψει το admin interface του Django, π.χ χρειάζεστε έναν απλό τρόπο προκειμένου να καθορίσετε ένα object για να το επεξεργαστείτε ή να το διαγράψετε.

## Υποστηρίζονται οι βάσεις δεδομένων NoSQL στο Django;

Οι βάσεις δεδομένων NoSQL δεν υποστηρίζονται επισήμως από το ίδιο το Django. Υπάρχουν, ωστόσο, αρκετά projects τρίτων όπως και forks τα οποία επιτρέπουν τη λειτουργία NoSQL με το Django, όπως είναι το Django non-rel.

Μπορείτε, επίσης, να ρίξετε μια ματιά στη σελίδα του wiki η οποία συζητά μερικές εναλλακτικές λύσεις.

## Πως προσθέτω δικές μου επιλογές στις εντολές της βάσης δεδομένων CREATE TABLE, όπως προσδιορίζοντας το MyISAM ως τύπο πίνακα;

Προσπαθούμε να αποφύγουμε την εισαγωγή ειδικών περιπτώσεων στο κώδικα του Django όπως είναι ο τύπος του πίνακα κλπ, οι οποίες αφορούν επιλογές συγκεκριμένων βάσεων δεδομένων. Αν θέλετε να χρησιμοποιήσετε τέτοιου είδους επιλογές, δημιουργήστε ένα migration με τη λειτουργία `RunSQL` η οποία θα περιέχει τις δηλώσεις του τύπου `ALTER TABLE` οι οποίες θα κάνουν αυτό που θέλετε.

Για παράδειγμα, αν χρησιμοποιείτε τη MySQL και θέλετε οι πίνακες σας να χρησιμοποιήσουν τον τύπο πίνακα MyISAM, χρησιμοποιήστε την ακόλουθη SQL εντολή:

    ALTER TABLE myapp_mytable ENGINE=MyISAM;