我正在使用flask-migrate、SQLAlchemy 和alembic 来管理我的数据库。我想在数据库中创建一个新表。新表有一列使用现有的Enum. 我读过很多这样的问题,你可以使用现有的Enum带有create_type=False标志。这似乎对我不起作用。请参阅upgrade()下面我的修订文件中的功能。
def upgrade():
op.create_table(
'label',
sa.Column('id', UUID(as_uuid=True), default=uuid4),
sa.Column('labelText', sa.Text, nullable=False),
sa.Column('sourceCountry', sa.Enum('it', 'gb', 'gr', 'bg', 'pt', name='country', create_type=False), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('id')
)
op.add_column('entity', sa.Column('labelId', UUID(as_uuid=True)))
op.create_foreign_key(
'fk_entity_label',
'entity', 'label',
['labelId'], ['id'],
)
Run Code Online (Sandbox Code Playgroud)
这是我的版本:
Flask==1.1.1
Flask-Ext==0.1
Flask-Migrate==2.5.3
Flask-Script==2.0.6
Flask-SQLAlchemy==2.4.1
alembic==1.4.1
Run Code Online (Sandbox Code Playgroud)
我的错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateObject) type "country" already exists
[SQL: CREATE TYPE country AS ENUM ('it', 'gb', 'gr', 'bg', 'pt')]
(Background on this error at: http://sqlalche.me/e/f405)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SQLAlchemy 中的两个表填充数据库。我已经创建了数据库 test_database,现在我尝试在其中创建 2 个表。我已经检查过该数据库是否已使用 成功创建\l。以下是文件 create.py 的代码,它创建一个包含两个表的数据库:
import os
from flask import Flask, render_template, request
from models import *
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://shammun:my_password@localhost:5432/test_database.db'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
# db = SQLAlchemy()
db.init_app(app)
def main():
db.create_all()
if __name__ == "__main__":
with app.app_context():
main()
Run Code Online (Sandbox Code Playgroud)
这个文件create.py导入了model.py,生成了两个表,其代码如下:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Flight(db.Model):
__tablename__ = "flights"
id = db.Column(db.Integer, primary_key=True)
origin = db.Column(db.String, nullable=False)
destination = db.Column(db.String, nullable=False)
duration = db.Column(db.Integer, nullable=False) …Run Code Online (Sandbox Code Playgroud) 我可以使用以下命令运行烧瓶测试python -m unittest discover -p testing.py,但是当我尝试运行时,python app.py runserver它会显示以下错误消息:
Traceback (most recent call last):
File "app.py", line 10, in <module>
from models import db
File "/home/paula/projects/envioclicktest/restaurant_flask/models.py", line 1, in <module>
from app import app as app
File "/home/paula/projects/envioclicktest/restaurant_flask/app.py", line 10, in <module>
from models import db
ImportError: cannot import name 'db' from partially initialized module 'models'
(most likely due to a circular import) (/home/paula/projects/envioclicktest/restaurant_flask/models.py)
Run Code Online (Sandbox Code Playgroud)
我的项目结构如下:
-restaurant_flask
|-app.py
|-models.py
|-testing.py
Run Code Online (Sandbox Code Playgroud)
这是我的文件的内容以及我认为在每个文件中造成麻烦的行
from flask import Flask
from flask_script …Run Code Online (Sandbox Code Playgroud) 我有一个相当大的 Flask 应用程序,创建新数据表的典型工作流程如下:
我在 models.py 中创建一个类,如下所示:
class ExampleModel(db.Model):
__tablename__ = 'example_table'
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String(100))
Run Code Online (Sandbox Code Playgroud)
然后我跑了flask db migrate,然后flask db upgrade。这些命令之后,表已创建,我可以正常插入数据
item = ExampleModel(text='something')
db.session.add(item)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在使用上述工作流程时没有遇到任何问题,甚至在我开始遇到问题之前也是如此。我添加了一个表,然后向其中添加了一些列,基本上只是遇到了可为空值之类的问题(用户错误)。除了删除一些模型类、迁移脚本以及手动删除 psql 中的一个表(我使用的是 Postgres)之外,我没有做太多事情。
现在,我无法从上面执行测试用例(ExampleModel)。当我尝试这个简单的示例时,迁移目录中没有创建迁移脚本
输出来自flask db migrate:
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
Run Code Online (Sandbox Code Playgroud)
输出来自flask db upgrade:
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情:
migrations目录并创建一个新目录我的配置和初始化文件应该没问题——自从上次工作以来它们没有改变。我被这个难住了
我有两个 API,其中一个基本上用于根据发送的数据生成 PDF。
下面是第一个 API 端点
http://localhost:5000/api/sendReceiptData
Run Code Online (Sandbox Code Playgroud)
以附件形式返回 PDF 文件。
第二个 API 将使用第一个 API,并应返回 PDF 作为响应中的附件。我已经尝试过,但出现此错误TypeError: Object of type bytes is not JSON serializable
因此,我如何从第二个 API 中的第一个 API 返回文件响应
我正在使用Flask-sqlalchemy.
这是mysql:
select u.id, count(i.id) as count from rss_urls as u left join rss_items as i on u.id = i.rss_urls_id group by u.id;
Run Code Online (Sandbox Code Playgroud)
我应该如何将其翻译成sqlalchemy?
非常感谢.
class RSS_urls(db.Model):
id = db.Column(db.Integer, primary_key=True)
link = db.Column(db.String(200), unique=True)
add_time = db.Column(db.DateTime)
rss_items = db.relationship("RSS_items", backref="base_url", lazy="dynamic")
class RSS_items(db.Model):
id = db.Column(db.Integer, primary_key=True)
rss_urls_id = db.Column(db.Integer, db.ForeignKey("RSS_urls.id"))
link = db.Column(db.String(200))
title = db.Column(db.String(200))
Run Code Online (Sandbox Code Playgroud)
这是模型.
我有保存表单(wtf)到(sqlalchemy)db的问题,表单正在渲染,但提交后没有任何反应...
例如:
127.0.0.1 - - [30/Dec/2013 10:30:24] "POST /add/ HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)
我试图在没有验证器的情况下保存
例如:
name = TextField('Task Name')
Run Code Online (Sandbox Code Playgroud)
我试图以其他方式保存表格:
if request.method == 'POST' and form.validate():
new_task = Tasks(
form.name.data,
form.due_date.data,
form.priority.data,
form.posted_date.data,
session['user_id'],
form.category.data,
form.super_category.data,
form.description.data
)
db.session.add(new_task)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
以下代码:
楷模 :
# -*- coding: utf-8; -*-
from app import db
import datetime
class Tasks(db.Model):
__tablename__ = "tasks"
task_id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(255),nullable=False)
description = db.Column(db.Text,nullable=False)
priority = db.Column(db.Integer,nullable=False)
posted_date = db.Column(db.DATE,nullable=False)
status = db.Column(db.Integer,default=1,nullable=False)
category = db.Column(db.String(255),nullable=False)
super_category …Run Code Online (Sandbox Code Playgroud) 我是SQLAlchemy的新手,我正在使用Flask-SQLAlchemy作为我当前的项目.我收到一个让我难过的错误:
sqlalchemy.orm.exc.UnmappedInstanceError: Class 'flask_sqlalchemy._BoundDeclarativeMeta' is not mapped; was a class (app.thing.Thing) supplied where an instance was required?
Run Code Online (Sandbox Code Playgroud)
我已经尝试改变实例中的符号,并移动一些东西.问题可能与这个问题或其他问题有关吗?
这是我的module(thing.py),其类继承自Flask-SQLAlchemy db.Model(如SQLAlchemy的Base类):
from app import db
class Thing(db.Model):
indiv_id = db.Column(db.INTEGER, primary_key = True)
stuff_1 = db.Column(db.INTEGER)
stuff_2 = db.Column(db.INTEGER)
some_stuff = db.Column(db.BLOB)
def __init__():
pass
Run Code Online (Sandbox Code Playgroud)
这是我在thing_wrangler.py模块中填充数据库的调用:
import thing
from app import db
def populate_database(number_to_add):
for each_thing in range(number_to_add):
a_thing = thing.Thing
a_thing.stuff_1 = 1
a_thing.stuff_2 = 2
a_thing.some_stuff = [1,2,3,4,5]
db.session.add(a_thing)
db.session.commit()
Run Code Online (Sandbox Code Playgroud) 我有一个SLQALchemy对象,我正在使用marshmallow序列化.
该对象有N个赞和N个评论.它看起来像这样:
class Parent():
__tablename__ = 'parent'
title = Column(db.String(100), unique=True, nullable=False)
description = Column(db.String(500))
created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
comments = relationship('Comment')
likes = relationship('Like')
Run Code Online (Sandbox Code Playgroud)
序列化器看起来像这样:
class CommentSerializer(Serializer):
class Meta:
fields = ('id', 'text', 'created_at', 'parent_id')
class LikeSerializer(Serializer):
class Meta:
fields = ('id', 'created_at', 'parent_id')
class ParentSerializer(Serializer):
comments = fields.Nested(CommentSerializer)
likes = fields.Nested(LikeSerializer)
class Meta:
fields = ('id', 'title', 'description', 'comments', 'likes')
Run Code Online (Sandbox Code Playgroud)
我尝试在视图中运行它,如下所示:
allParents = Parent.query.all()
Run Code Online (Sandbox Code Playgroud)
并将其转换为JSON:
return jsonify({"parents": ParentSerializer(allParents, many=True).data})
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,我收到一个错误list indices must be integers, …
我有一个db_table.py看起来像这样的文件:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost/mydb'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
.....db tables....
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时:
flask db init
Run Code Online (Sandbox Code Playgroud)
我明白了:
错误:找不到Flask应用程序.您没有提供FLASK_APP环境变量.
我首先尝试手动设置FLASK_APP var,FLASK_APP然后set FLASK_APP=app.py再次运行,但这并没有解决问题.
我该如何解决这个问题?
谢谢
flask-sqlalchemy ×10
flask ×9
python ×8
sqlalchemy ×5
alembic ×2
marshmallow ×1
mysql ×1
orm ×1
wtforms ×1