0

I tried adding a second table to my website database. First one works and is where I collect inputted e-mails. I wanted a second table that connects inputted instagram handles. So I made this code for my app.py file:

from flask import Flask, jsonify, request, send_from_directory
from flask_sqlalchemy import SQLAlchemy
import datetime
from flask_marshmallow import Marshmallow
from flask_cors import CORS

app = Flask(__name__, static_url_path='', static_folder='frontend/build')
CORS(app)

app.config['SQLALCHEMY_DATABASE_URI']='mysql://***:***@localhost/pobble_data'


app.config['SQLALCHEMY_TRACK_MODIFICATIONS']= False

db = SQLAlchemy(app)
ma = Marshmallow(app)

class Emails(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    email = db.Column(db.String(120)) 

    def __init__(self, email):
        self.email = email

class EmailsSchema(ma.Schema):
    class Meta:
        fields = ('id','email')

class IGHandles(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    ighandle = db.Column(db.String(120)) 

    def __init__(self, ighandle):
        self.ighandle = ighandle

class IGHandlesSchema(ma.Schema):
    class Meta:
        fields = ('id','ighandles')



email_schema = EmailsSchema()
emails_schema = EmailsSchema(many=True)

ighandle_schema = IGHandlesSchema()
ighandles_schema = IGHandlesSchema(many=True)

@app.route("/", defaults={'path':''})
def serve(path):
    return send_from_directory(app.static_folder, 'index.html')


@app.route('/get', methods = ['GET'])
def get_emails():
    all_emails = Emails.query.all()
    results = emails_schema.dump(all_emails)
    return jsonify(results)
def get_ighandles():
    all_ighandles = IGHandles.query.all()
    results = ighandles_schema.dump(all_ighandles)

@app.route('/get/<id>', methods = ['GET'])
def post_emails(id):
    results = Emails.query.get(id)
    return email_schema.jsonify(results)
def post_ighandles(id):
    results = IGHandles.query.get(id)
    return ighandle_schema.jsonify(results)

@app.route('/add', methods = ['POST'])
def add_email2():
    email = request.json['email']

    entry = Emails(email)
    db.session.add(entry)
    db.session.commit()
    return email_schema.jsonify(entry)
def add_ighandles():
    ighandle = request.json['ighandle']
    entry = IGHandles(ighandle)
    db.session.add(entry)
    db.session.commit()



if __name__ == "__main__":
    app.run(debug=True)

I saved all of this and went to my python interpreter and ran

from app import db and db.create_all()

and I get two tables: emails and ig_handles

I expected the following two tables because they are the class names: Emails and IGHandles.

In fact I searched all of my code and don't see ig_handles anywhere so am not sure where it gets that from. I think it's some sort of cached name I might have used when I was experimenting with making the tables earlier.

I've tried running db.session.expire_all() and that doesn't help.

filifunk
  • 543
  • 1
  • 6
  • 18
  • 5
    See the comment [in the documentation](https://flask-sqlalchemy.palletsprojects.com/en/2.x/models/) about CamelCase. Moreover, if you want full control over the table names you must [define `__tablename__` at the class](https://stackoverflow.com/questions/19799973/overriding-the-table-name-in-flask-alchemy). – metatoaster Jun 22 '21 at 03:40
  • That changed the name! thanks, but I guess that didn't make it workable...I can't add stuff to the table from the react webapp...but that's another question I guess. – filifunk Jun 22 '21 at 12:13

0 Answers0