标签: flask-sqlalchemy

Flask错误处理

我正在尝试捕获由flask-sqlalchemy生成的错误.遗憾的是,我的代码无法处理错误,因为调试器首先捕获它.当我尝试将一条记录插入到一​​个数据库中时,会发生这种情况,该数据库应该是唯一但是重复的字段.有什么方法可以解决这个问题吗?这是追溯.

sqlalchemy.exc.IntegrityError

IntegrityError: (IntegrityError) column username is not unique u'INSERT INTO user (username, password, karma) VALUES (?, ?, ?)' (u'Test', u'test', 0)
Traceback (most recent call last)

    *
      File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 889, in __call__

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] return self.wsgi_app(environ, start_response)

    *
      File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 879, in wsgi_app

       [Display the sourcecode for this frame]  [Open an interactive python shell in this frame] response = self.make_response(self.handle_exception(e))

    *
      File "/home/josh/Projects/masterpieces_of_code/env/lib/python2.6/site-packages/flask/app.py", line 876, …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy

1
推荐指数
1
解决办法
7412
查看次数

覆盖 Flask-Alchemy 中的表名

我正在创建一个 Flask 应用程序并使用 Flask-Alchemy 访问 MySQL 数据库。

我有以下类来访问表:

class price_table(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    trans_id = db.Column(db.Integer)
    timestamp = db.Column(db.Integer)
    order_type = db.Column(db.String(25))
    price = db.Column(db.Numeric(15,8))
    quantity = db.Column(db.Numeric(25,8))
    def __repr__(self):
            return 'id'
Run Code Online (Sandbox Code Playgroud)

对于表 'price_table' 这非常有效,但问题是我有几个表与 'price_table' 的列相同,我只知道运行时的名称。

我想重用上面的类,所以我想我可以将tablename更改为我需要读取的表的名称,但这不起作用,程序一直在读取“价格表”

如何在运行时覆盖表名?

python mysql flask flask-sqlalchemy

1
推荐指数
1
解决办法
5388
查看次数

如何获取不是多对多关系的所有行

我需要获取所有不涉及该组的用户。在 SQL 中,它就像NOT EXIST. 但我不知道如何在 SQLAlchemy 的 ORM 中做到这一点。

模型.py

group_table = Table('assoc_groups_users', Base.metadata,
                Column('user_id', Integer, ForeignKey('users.id')),
                Column('group_id', Integer, ForeignKey('groups.id'))
                )

class Users(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=False)

class Groups(Base):
    __tablename__ = "groups"
    id = Column(Integer, primary_key=True)
    title = Column(String(127))

    users = relationship("Users",
                           secondary=books_table,
                           backref=backref("books", lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask-sqlalchemy

1
推荐指数
1
解决办法
707
查看次数

在SQLAlchemy中使用1-N关系

在使用以下类定义简单的1-n关系后:

class User(db.Model):
__tablename__ = 'user'
UserID = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(80), unique=True)
emails = db.relationship('email')

def __init__(self, username):
    self.Name = username


class Email(db.Model):
    __tablename__ = 'email'
    EmailID = db.Column(db.Integer, primary_key=True)
    Email = db.Column(db.String(80), unique=True)
    User = db.Column(db.Integer,db.ForeignKey('user.UserID'))

    def __init__(self, mail):
    self.Email = mail
Run Code Online (Sandbox Code Playgroud)

我想创建一个用户并添加一些邮件,然后使用以下命令将其保存到数据库:

username = "serkan1"
newuser = User(username)
newuser.emails[Email(Email='serkan@ismygirl.com'),Email(Email = 'eddfsdfq@ff.com')]
db.session.add(product)
db.session.commit()
return "ok"
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:

ArgumentError: relationship 'emails' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)
Run Code Online (Sandbox Code Playgroud)

我怎样才能简单地创建一个用户,以1-n模式向其添加一些电子邮件并将其保存到数据库?

python flask-sqlalchemy

1
推荐指数
1
解决办法
1106
查看次数

使用Flask-admin在PDF中存储PDF文件

我可以使用Flask-Admin将PDF文件作为对象或blob存储在数据库中吗?我在文档中找不到任何参考.

谢谢.干杯

python object mongodb flask-sqlalchemy flask-admin

1
推荐指数
1
解决办法
1887
查看次数

如何使用外键替换其值来构建 API 端点?

我目前正在使用 Flask、SQLAlchemy 和 Marshmallow 构建 API。我有一个相当简单的数据库模型,如下所示:

class Transaction(db.Model):
    #Transaction Model
    __tablename__ = 'transactions'
    id = db.Column(db.Integer, primary_key = True)
    created_at = db.Column(db.DateTime, default=datetime.datetime.now)
    date = db.Column(db.DateTime)
    description = db.Column(db.Text)
    amount = db.Column(db.Float)
    category_id = db.Column(db.Integer, db.ForeignKey('categories.id'))
    category = db.relationship('Category', uselist=False, lazy='select')
    sub_category_id = db.Column(db.Integer, db.ForeignKey('sub_categories.id'))
    sub_category = db.relationship('SubCategory', uselist=False, lazy='select')
    account = db.Column(db.Integer, db.ForeignKey('accounts.id'))
    inner_transfer = db.Column(db.Boolean)



class Category(db.Model):
    __tablename__ = 'categories'
    id = db.Column(db.Integer, primary_key = True)
    category = db.Column(db.String(64), unique = True)
    transaction = db.relationship('Transaction')
Run Code Online (Sandbox Code Playgroud)

我的棉花糖架构如下所示:

class CategorySchema(ma.ModelSchema): …
Run Code Online (Sandbox Code Playgroud)

api-design flask flask-sqlalchemy marshmallow

1
推荐指数
1
解决办法
1750
查看次数

烧瓶安全不能与多个工人一起使用 gunicorn?

我正在写一个网站Flask。我Flask-Secuirty用来做身份验证。我nginx + gunicorn用来部署它。

nginx的配置如下:

server{
    listen 80;
    server_name project.example.com;
    location / {
        proxy_pass http://127.0.0.1:5000;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
    }
}
Run Code Online (Sandbox Code Playgroud)

我用gunicorn -w worker_number -k gevent run:app -p app.pid -b 127.0.0.1:5000开始gunicorn

如果worker_number1,则一切正常。

如果worker_number大于1like 3,我将无法使用 登录Flask-Security

服务器的输出说登录的post请求是200。但服务器再次将我重定向到登录页面。

经过一番搜索,我找不到直接原因。我猜这可能是由SERVER_NAMEFlask的配置或Flask-SQLAlchemy.

有没有人遇到过这种情况?请给我一些建议。

python nginx gunicorn flask-sqlalchemy flask-security

1
推荐指数
1
解决办法
1448
查看次数

为什么 Flask-SQLAlchemy 需要主键?

如果我定义一个没有主键的表:

class CustomAttribute(db.Model):
    player = db.Column(db.Integer, db.ForeignKey('player.id'))
    key = db.Column(db.Text, nullable=False)
    value = db.Column(db.Text, nullable=False)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

sqlalchemy.exc.InvalidRequestError: Class <class 'rpgquest.models.CustomAttribute'> does not have a __table__ or __tablename__ specified and does not inherit from an existing table-mapped class.
Run Code Online (Sandbox Code Playgroud)

唯一的解决方法是手动定义__tablename__,但为什么需要这样做?

我不需要主键,因为唯一的请求是获取具有 X 键值对的所有玩家,或者获取某个玩家的所有键值对,并且玩家不能有重复的键。

python sqlalchemy primary-key flask-sqlalchemy

1
推荐指数
1
解决办法
3416
查看次数

Update model with WTForms form data

I have some Flask-SQLAlchemy models and Flask-WTF forms generated with wtforms_alchemy to represent them. I implemented a method on each model to update its attributes from a form's data. For each new model and field I have to update these methods, which is annoying. Is there a way to make this more automatic, or a a feature in the libraries I'm using that I'm missing?

def edit_car(car_id):
    form = CarForm(request.form)
    if form.is_valid():
        car = Car.query.get_or_404(car_id)
        car.from_form(form) # Update car fields …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-sqlalchemy flask-wtforms

1
推荐指数
1
解决办法
1109
查看次数

SAWarning:类型为&lt;Child&gt;的对象不在会话中,沿着“ Parent.children”的添加操作将不会继续

我一直在这个问题上停留,我不知道如何解决它。这是我的models.py文件:

models.py

class TripDetail(db.Model):
    """
    Base class for every table that contains info about a trip.
    """
    __abstract__ = True
    __bind_key__ = 'instructions'

    id = db.Column(db.Integer, primary_key=True)
    # list of fields    

class Overview(TripDetail):
    """
    Class that contains general information about a trip.
    """
    __tablename__ = 'overviews'
    __table_args__ = (
        db.ForeignKeyConstraint(['user_id', 'calendar_id'], ['calendars.user_id', 'calendars.id'], ondelete='CASCADE'),
    )  # constraints on other tables, omitted here
    user_id = db.Column(db.Integer, primary_key=True)
    calendar_id = db.Column(db.Integer, primary_key=True)
    calendar = db.relationship('Calendar', backref=db.backref('overviews', cascade='delete'), passive_deletes=True)
    # other …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

1
推荐指数
1
解决办法
605
查看次数