Flask-SqlAlchemy 常见问题汇集

使用SQLALCHEMY 出现warning 的问题解决
出现错误:
D:\Python27\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.  
  1.   'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '  

解决方案:

配置文件增加以下内容:(config.py)

   SQLALCHEMY_TRACK_MODIFICATIONS = True

   SQLALCHEMY_COMMIT_TEARDOWN = True



(一)

Python3在flask_sqlalchemy中相比改动了一些比如模块的导入。

在Python2中应该是 from flask.ext.sqlalchemy impot SQLAlchemy

虽然在Python3中这样使用其实不会错但是Python3中不赞成这样使用可能在未来会取消flask.ext.sqlalchemy这是个趋势

在Python3中建议使用from flask_sqlalchemy import SQLAlchemy


(二)

第一次使用这个模块需要对源码进行改变及设置:

设置SQLALCHEMY_TRACK_MODIFICATIONS 为True或False

[python]  view plain  copy
  1. /home/air/Desktop/microblog/flask/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py:839: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.  
  2.   'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '  
提示我们需要设定参数‘True’ 或者 ‘’Flase‘
是说 SQLALCHEMY_TRACK_MODIFICATIONS 不能默认什么都没有, 
得设置其为  True  或者  False , 
所以就去所提示的路径中 /flask/local/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py 这个文件中进行更改, 
提示给的839行,在前面几行的位置有这样的 setdefault , 
把None改为True;
或者用搜索SQLALCHEMY_TRACK_MODIFICATIONS的方式查找到对应行。

[python]  view plain  copy
  1.   
[python]  view plain  copy
  1. "color:rgb(63,63,63);">  
[python]  view plain  copy
  1. "color:rgb(63,63,63);">...  
  2.  833            track_modifications = app.config.setdefault(  
  3.  834             'SQLALCHEMY_TRACK_MODIFICATIONS'"color:rgb(255,0,0);">True #这里,一开始是None需要改变为True or Flase  
  4.  835         )  
  5. ...  

track_modifications = app.config.setdefault(

    789             'SQLALCHEMY_TRACK_MODIFICATIONS', True

    790         )


(三)
Python3与Python2中连接也是有区别的
这里不详讲参考连接为点击打开链接

大概就是如下:
但是在Python3进行了改变:
正确的连接应该是这样
为什么会这样我也不知道,到时看看源码再说

如果不这样连接会怎么样,恭喜你会爆出一堆你不知道是什么鬼的错误
解决方法就是上面的Python2请无视

Flask-SQLAlchemy的中文文档连接 Flask-SQLAlchem





python 数据操作的时候,

class Record(db.Model):

      __tablename__ = 'reg_records'

      request_id = db.Column(db.Integer, primary_key = True)

      title = db.Column(NVARCHAR())


  class Field(db.Model):

      __tablename__ = 'reg_fields'

      request_id = db.Column(db.Integer, primary_key= True) 

      name = db.Column(NVARCHAR(), primary_key = True)


报以下错误:

>>> print(admin_role.id)

.....
InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Triggering mapper: 'Mapper|Role|role'. Original exception was: Could not determine join condition between parent/child tables on relationship Role.users - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.



你可能感兴趣的:(Python-Flask)