我有以下应用程序结构:
run.py
|->app
|->models
|-> user.py (declares role-to-user relationship table and User model)
|-> role.py (declares Role model)
|-> main.py (contains initialization and all required imports)
|-> extensions (here sqlalchemy variable declared to be imported later)
Run Code Online (Sandbox Code Playgroud)
当我尝试以下方式创建初始数据库结构时:
from app.models import *
from app.extensions import db
from app.main import myapp #app is initialized with all packages like assets, db, security, etc.
with myapp.test_request_context():
db.create_all()
Run Code Online (Sandbox Code Playgroud)
我有一个例外:NoReferencedTableError:与列“users_to_roles.user_id”关联的外键找不到用于生成目标列“id”的外键的表“users”
我也尝试按照以下方式进行操作:
@app.before_first_request
def initialize_database():
db.create_all()
Run Code Online (Sandbox Code Playgroud)
没有成功
我尝试移动Role到声明模型的同一文件,User并得到相同的结果。我在这里阅读了文档: https: //pythonhosted.org/Flask-SQLAlchemy/quickstart.html但它说“你只需要导入db”并且它不起作用。 …
是否可以建立这样的关系:
class Games(Base):
publishers = relationship(GameCompany).where(GameCompany.role == 'publisher')
developers = relationship(GameCompany).where(GameCompany.role == 'developer')
Run Code Online (Sandbox Code Playgroud)
本质上,创建一个执行连接并具有 where 子句的模型属性。
GameCompany(game_id, company_id, role)
Run Code Online (Sandbox Code Playgroud) 我正在使用 Flask、SQLAlchemy 和 WTForms 开发一个 Web 应用程序。我想通过数据库查询在SelectField中获取我的选择。
有更多细节。
my_query = my_table.query.with_entities(My_Entities).all()
Run Code Online (Sandbox Code Playgroud)
结果
[(u'1',), (u'2',), (u'3',)]
我的课
class MyForm(Form):
My_Var = SelectField(choices=RIGHT_HERE)
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
首先我定义了三个表
registerations = db.Table()
class Student(db.Model):
class Class(db.Model):
Run Code Online (Sandbox Code Playgroud)
我可以用
student.classes.append(class1)
student.classes.append(class2)
student.classes.append(class3)
student.classes.append(class4)
Run Code Online (Sandbox Code Playgroud)
在联结表中添加信息,效果很好
但我的问题是如何一次将所有课程添加给学生
student.classes.somemethod(class1, class2, class3, class4)
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以做到这一点>>或者我必须自己编写一个函数..
我可以将其SELECT id from parts where name='Part1'作为 SQL 语句获取,但是使用 SQLAlchemy 执行此操作的方法是什么?
我试过了;
db.session.query(Parts.id).filter(name=form.name.data)
Run Code Online (Sandbox Code Playgroud)
但这返回一个对象而不是id
我在连接到多个数据库的 Flask 应用程序中使用 sqlalchemy,使用此处所示的绑定。我想在非主数据库之一上执行原始 SQL 查询。
\n\n我正在尝试使用session.execute,如此处所示,但它针对主数据库执行。API 文档声明您可以使用参数:“bind \xe2\x80\x93 用作绑定的可选引擎”。如何访问和指定非主数据库的绑定并调用 session.execute 来执行该数据库的查询?
\n\n或者,还有其他方法可以解决这个问题吗?
\n我有一个小 Flask 应用程序 (Python3),它开始变得有点复杂,所以我决定从 SQLite 切换到 Postgresql。我知道这会给我带来一些问题,但我的代码库具有良好的测试覆盖率,因此我有信心在投入生产之前可以消除任何问题。
特别是,在我输入密码的任何地方,我都必须进行编码 ( password.encode('utf-8'))。
(顺便说一句,时区是我遇到一些问题的另一个领域。我最终从我使用的任何日期中删除了时区。)
但还有最后一个错误我无法弄清楚。为了测试密码是否已更新,我进行了以下测试:
self.assertTrue(bcrypt.check_password_hash(
user.password, new_password
))
Run Code Online (Sandbox Code Playgroud)
这应该检查当前密码(当我打印它时,它看起来像一个字节刺)与new_password. 但我收到一条错误消息ValueError: Invalid salt
我很想知道如何解决这个问题,但我也希望有人能解释一下这里发生了什么。
我有一个模型,它应该在初始化时转换一些字段。我尝试过使用sqlalchemy.orm.reconstructor,但遇到了模型自动刷新的问题(或误解)。
这是我的模型的示例:
\n\nfrom app import db\nfrom sqlalchemy.orm import reconstructor\n\nt_model = db.Table(\n \'models\', \n db.metadata,\n dbc.Column(\'id\', db.Integer, primary_key=True),\n dbc.Column(\'value\', db.String)\n)\n\n\nclass Model(db.Model):\n\n __table__ = t_order_data\n\n def __init__(self, value)\n self.value = value\n\n @reconstructor\n def init_on_load(self)\n """cast to None if value is empty string"""\n self.value = None if not self.value else self.value\n\n def run_db_function(self)\n try:\n result = db.session.execute(db.func.somefunc(\'some_param\')).fetchone()\n except Exception:\n db.session.rollback()\n raise\n else:\n db.session.commit()\n return result\nRun Code Online (Sandbox Code Playgroud)\n\n我的代码做了什么:
\n\nmodel = Model.query.get(1) # in table this row is id=1, value=\'\'\n …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 python 应用程序中实现 Flask-Session。我在文档中读到,建议使用另一个接口,例如 ,而SqlAlchemySessionInterface不是NullSessionInterface在未向配置密钥提供任何内容时使用的默认接口SESSION_TYPE。
从 Session 类下的flask_session/ init .py 文件中读取
默认情况下 Flask-Session 将使用 :class:
NullSessionInterface,您确实应该配置您的应用程序以使用不同的 SessionInterface。
SESSION_TYPE将配置键设置为后"sqlalchemy"出现错误
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "sessions" does not exist
Run Code Online (Sandbox Code Playgroud)
这表明 Flask-Session 正在寻找在我的数据库模型中使用名为“sessions”的表,但我在 Flask-Session 文档中找不到任何地方指出应该创建一个表以及它应该具有哪些字段。
有人可以建议解决这个问题吗?
我有两个mysql数据库,一个是本地主机,另一个现在在服务器中,我将使用flask在python中为该应用程序创建简单的应用程序,我想连接两个mysql数据库(本地和服务器)。
任何人请建议如何将多个数据库连接到烧瓶中。
app = Flask(__name__)
client = MongoClient()
client = MongoClient('localhost', 27017)
db = client.sampleDB1
Run Code Online (Sandbox Code Playgroud)
如果可能的话示例代码。
谢谢
flask-sqlalchemy ×10
flask ×6
python ×6
sqlalchemy ×4
python-3.x ×2
bcrypt ×1
many-to-many ×1
mongodb ×1
postgresql ×1