我正在尝试捕获由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) 我正在创建一个 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更改为我需要读取的表的名称,但这不起作用,程序一直在读取“价格表”
如何在运行时覆盖表名?
我需要获取所有不涉及该组的用户。在 SQL 中,它就像NOT EXIST. 但我不知道如何在 SQLAlchemy 的 ORM 中做到这一点。
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) 在使用以下类定义简单的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模式向其添加一些电子邮件并将其保存到数据库?
我可以使用Flask-Admin将PDF文件作为对象或blob存储在数据库中吗?我在文档中找不到任何参考.
谢谢.干杯
我目前正在使用 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) 我正在写一个网站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_number是1,则一切正常。
如果worker_number大于1like 3,我将无法使用 登录Flask-Security。
服务器的输出说登录的post请求是200。但服务器再次将我重定向到登录页面。
经过一番搜索,我找不到直接原因。我猜这可能是由SERVER_NAMEFlask的配置或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 键值对的所有玩家,或者获取某个玩家的所有键值对,并且玩家不能有重复的键。
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) 我一直在这个问题上停留,我不知道如何解决它。这是我的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) flask-sqlalchemy ×10
python ×8
flask ×4
sqlalchemy ×3
api-design ×1
flask-admin ×1
gunicorn ×1
marshmallow ×1
mongodb ×1
mysql ×1
nginx ×1
object ×1
primary-key ×1
wtforms ×1