[Flask] Updating database fields from views

Anonymous Coder anonymouscodar at gmail.com
Sat Feb 25 09:35:02 EST 2017


I think I found it. I really am sorry that I was not clearly lay down
source code reflecting the issue and thanks for the patience. In __init__
file the previous developer has something like below:

#File1
login_manager = LoginManager()
login_manager.init_app(app)

db = {
    'users': {
        "test": ("test", "test")
    },
    'session': {}
}
app.config['DEBUG'] = True
app.config['WTF_CSRF_ENABLED'] = False
app.secret_key =
'\x06\x94\xcf\xaf\xaeB&\xd1s\xa8ZGU\xd2J\xf3\xd6\x12(\xbd\xf5\xc3\x858'

db = 'db'

Then in another file he declared the database like below:

#File 2
import os
import oursql
from flask import Flask

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://'+ 'root' \
+ ':' + 'test123'+'@'\
+ 'localhost' + '/students'
db = SQLAlchemy(app)
def get_connection():
    return oursql.connect(host='localhost', port='3306',
                          user='root',
                          passwd='test123', db='students')

Now when I need to create any model and need to add tables I do this in
shell:

from file2 import db
from somemodelfile import MyNewModel
db.create_all()

That is how it adds tables. But still I am confuse that why it is not
letting me update fields.

Except above code there is no representation of data related to how db
needs to be handled. All the file inside project call database from file1
but in shell I can't use create_db(). When in shell I do like below:

>>>from file1 import db
>>>db
'db' #This is the output



On Sat, Feb 25, 2017 at 1:50 PM, Tom Vaughan <thomas.david.vaughan at gmail.com
> wrote:

> But how exactly is it imported? Where is it assigned a value? The
> problem seems to be that db is not an instance of a Database object,
> but rather it has been assigned a string. For example:
>
> $ python3
> Python 3.5.2 (default, Nov 17 2016, 17:05:23)
> [GCC 5.4.0 20160609] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>> db = "foobar"
> >>> db.session
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: 'str' object has no attribute 'session'
>
>
>
> On Sat, Feb 25, 2017 at 9:40 AM, Anonymous Coder
> <anonymouscodar at gmail.com> wrote:
> > It is imported from another file.
> >
> > On Sat, Feb 25, 2017 at 11:51 AM, Gergely Polonkai <gergely at polonkai.eu>
> > wrote:
> >>
> >> The error message you showed us most probably references the db
> variable.
> >> Is db a global variable in the same file? Or is it imported from another
> >> module? Can you check its value?
> >>
> >>
> >> On Sat, Feb 25, 2017, 12:46 Anonymous Coder <anonymouscodar at gmail.com>
> >> wrote:
> >>>
> >>> Just a clarity that the stackoverflow post has nothing to do with the
> >>> question. That problem I got solved. I just gave the reference to show
> you
> >>> how my models are defined.
> >>> Thanks
> >>>
> >>>
> >>> On Sat, Feb 25, 2017 at 10:26 AM, Anonymous Coder
> >>> <anonymouscodar at gmail.com> wrote:
> >>>>
> >>>> I am having trouble understanding how to manipulate database in Flask
> >>>> from views. Rest of topics I was able to cover pretty quickly in
> Flask. I am
> >>>> a new user so help is much appreciated.
> >>>>
> >>>> Following is the link for details guys from one of my post at
> >>>> stackoverflow. Thank a lot for help guys.
> >>>>
> >>>>
> >>>> http://stackoverflow.com/questions/42451870/flask-
> error-typeerror-incompatible-collection-type-str-is-not-
> list-like/42452448?noredirect=1#comment72048738_42452448
> >>>>
> >>>>
> >>>>
> >>>> On Sat, Feb 25, 2017 at 8:43 AM, Gergely Polonkai <
> gergely at polonkai.eu>
> >>>> wrote:
> >>>>>
> >>>>> Where does your db variable come from?
> >>>>>
> >>>>>
> >>>>> On Sat, Feb 25, 2017, 08:36 Anonymous Coder <
> anonymouscodar at gmail.com>
> >>>>> wrote:
> >>>>>>
> >>>>>> I am having trouble with updating database tables from flask view.
> >>>>>> Following is the view:
> >>>>>>
> >>>>>> @app.route('/yearlychargedrec', methods=['GET', 'POST'])
> >>>>>> def yearly_charged_rec():
> >>>>>>
> >>>>>>     if not user_authorized():
> >>>>>>         return redirect('/')
> >>>>>>     # customer
> >>>>>>     if request.method == 'POST':
> >>>>>>         stripe_token = request.form['stripeToken']
> >>>>>>         email = request.form['stripeEmail']
> >>>>>>
> >>>>>>         customer = stripe.Customer.create(
> >>>>>>             email=email,
> >>>>>>             source=request.form['stripeToken']
> >>>>>>         )
> >>>>>>         try:
> >>>>>>             subscription = stripe.Subscription.create(
> >>>>>>                 customer=customer.id,
> >>>>>>                 plan="yearlyrec",
> >>>>>>             )
> >>>>>>
> >>>>>>             package = Package(
> >>>>>>
> >>>>>>                 is_active=True,
> >>>>>>                 planname = 'yearlyrec',
> >>>>>>
> >>>>>>             )
> >>>>>>             db.session.add(package)
> >>>>>>             db.session.commit()
> >>>>>>
> >>>>>>         except stripe.error.CardError as e:
> >>>>>>             # The card has been declined
> >>>>>>             body = e.json_body
> >>>>>>             err = body['error']
> >>>>>>
> >>>>>>     return render_template('/profile/charge/monthlycharge.html')
> >>>>>>
> >>>>>> Error I get is:
> >>>>>>
> >>>>>> AttributeError: 'str' object has no attribute 'session'
> >>>>>>
> >>>>>> Please advise.
> >>>>>> _______________________________________________
> >>>>>> Flask mailing list
> >>>>>> Flask at python.org
> >>>>>> https://mail.python.org/mailman/listinfo/flask
> >>>>
> >>>>
> >>>
> >
> >
> > _______________________________________________
> > Flask mailing list
> > Flask at python.org
> > https://mail.python.org/mailman/listinfo/flask
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/flask/attachments/20170225/7394f4e9/attachment-0001.html>


More information about the Flask mailing list