2017-09-12 2 views
-3

Alors, voici mon problèmeComment faire pour supprimer une table SQLite dans SQL Alchemy ORM?

je fais une application sur l'aide de la Flask SQLAlchemy ORM

maintenant le problème est, je peux avoir foiré la création d'un utilisateur de table;

dans le models.py le code ressemble,

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(50)) 
    username = db.Column(db.String(25), unique=True) 
    password = db.Column(db.String(50)) 
    email = db.Column(db.VARCHAR(50), unique=True) 
    registerdate= db.Column(db.DateTime) 

    def __init__(self, 
     name, 
     username, 
     password, 
     email, 
     registerdate=None): 
     self.name = name 
     self.username = username 
     self.password = password 
     self.email = email 
     if registerdate is None: 
      registerdate = datetime.utcnow() 
     self.registerdate = registerdate 

Maintenant, l'erreur est quelque chose comme

OperationalError: table User has no column named user_name 

c'est parce que je foiré la création de la table, la création de la table avec la colonne "user_name" d'abord, quand il m'a donné une erreur liée aux traits de soulignement, j'ai essayé de modifier le code, mais plutôt couru dans une autre erreur ...

alors comment puis-je supprimer le précédent 'User 'table dans SQL Alchemy ORM sans utiliser la syntaxe et les commandes sqlite3 habituelles?

P.S: J'utilise le terminal python ubuntu 16.04, aucun IDE comme Atom ou PyCharm et d'autres choses ...

+0

@ IljaEverilä Possible, mais je n'ai pas vraiment trouvé beaucoup d'aide là-bas. plus ce qui est censé être débutant amical –

+0

Quelle partie de 'User .__ table __. drop ([engine])' n'avez-vous pas trouvé utile? –

+0

@ IljaEverilä Je ne travaillais pas avec sqlite indepth juste l'utiliser comme DB, je suis tout à fait nouveau à cela et n'ai pas beaucoup d'expérience. Je pensais que cela aiderait les utilisateurs similaires. La syntaxe dans la question que vous mentionnez m'était complètement étrangère –

Répondre

-2

Très bien! donc après avoir été confondu par «moteur» et une tonne d'autres techniques concernant sqlite,

j'ai enfin la solution!

Entrez d'abord terminal python dans Terminal Ubuntu ... et à faire,

from YourProject import app,db 
    from YourProject.models import Table1,Table2....User #import the classes whose data you want to manipulate 
    import sqlite3 
    con = sqlite3.connect('ABSOLUTE PATH TO YOUR DB FILE') 
    c = con.cursor() 
    c.execute("DROP TABLE User;") 
    db.session.commit()      #i am a bit unsure about this one 

et voilà, voilà comment j'ai supprimé ma table 'utilisateur' gênant. J'ai ensuite créé un nouveau et cela fonctionne à merveille!

En outre, mon code de classe utilisateur était auparavant pas trop bien formaté, comme dans

def __init__(self,name,username,password,email,registerdate=None): 
    self.name = name 
    self.username = username 
    self.password = password 
    self.email = email 
    if registerdate is None: 
     registerdate = datetime.utcnow() 
    self.registerdate = registerdate 

avis, comment les paramètres de classe ne sont pas dans la formation « escaliers » avant? Cela m'a aussi beaucoup dérangé dans la création de la table et l'ajout de données. alors assurez-vous de prendre soin de cela.

Ceci est un problème que les débutants pourraient rencontrer et trouver déconcertant, j'espère aider quelqu'un!

À la votre!

+0

Votre paire connexion/curseur manuelle n'est pas liée à la session de Flask-SQLAlchemy, donc 'db.session.commit()' est redondant. –

+0

En outre, le moteur auquel vous faites référence n'est pas une "technicité sqlite", mais une partie de SQLAlchemy. Commencez par lire les deux rubriques "Lisez ceci en premier" [ici] (http://docs.sqlalchemy.org/fr/latest/). –