wldcordeiro
wldcordeiro

Reputation: 123

Setting up Flask-SQLAlchemy

Trying to set up Flask and SQLAlchemy on Windows but I've been running into issues.

I've been using Flask-SQLAlchemy along with PostgreSQL 9.1.4 (32 bit) and the Psycopg2 package. Here are the relevant bits of code, I created a basic User model just to test that my DB is connecting, and committing.

The three bits of code would come from the __init__.py file of my application, the models.py file and my settings.py file.

When I try opening up my interactive prompt and try the code in the following link out I get a ProgrammingError exception (details in link).

What could be causing this? I followed the documentation and I'm simply confused as to what I'm doing wrong especially considering that I've also used Django with psycopg2 and PostgreSQL on Windows.

Upvotes: 1

Views: 7182

Answers (3)

Viraj Wadate
Viraj Wadate

Reputation: 6123

Simple steps to use Flask SQLAlchemy:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

//employee.db database will get created in current python project

app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///employee.db'

db = SQLAlchemy(app)

class Employee(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(20))
    dept = db.Column(db.String(40))

To test this code you need to run your python shell

RUN IN PYTHON SHELL :

//This is going to create table create_all() method
from one_to_many import db
db.create_all()

//This is going to insert data into table
from one_to_many import Employee
new_emp = Employee(name="Viraj",dept="IT")
db.session.add(new_emp)
db.session.commit()

//To check or retrieve data use this 
show_all_data = Employee.query.all()
for i in show_all_data:
    print(i.id,i.name,i.dept)

Upvotes: 0

happygoat
happygoat

Reputation: 791

I had great help using this tutorial Flask Mega Tutorial

Upvotes: 6

madjar
madjar

Reputation: 12951

At the time you execute create_all, models.py has never been imported, so no class is declared. Thus, create_all does not create any table.

To solve this problem, import models before running create_all or, even better, don't separate the db object from the model declaration.

Upvotes: 4

Related Questions