标签: flask-sqlalchemy

如何在烧瓶应用程序模型中添加带有值(预定义)的下拉列表?

我是烧瓶的新手,我想将下拉列表添加到具有预定义值的表单中(不是从数据库中获取)。我创建了一个模型如下。

class DeliveryDetails(Model):

    _tablename_ = 'deliverydetails'
    id = Column(Integer, primary_key=True)
    customer_name = Column(String(250), nullable=False)
    delivery_type = Column(String(250), nullable=False)
Run Code Online (Sandbox Code Playgroud)

并查看如下。

class DeliveryDetailsView(ModelView, DeleteMixin):
    datamodel = SQLAInterface(models.DeliveryDetails)
    list_columns = ['customer_name','delivery_type']
    search_columns = ['customer_name','delivery_type']
    edit_columns = ['customer_name','delivery_type']
    add_columns = edit_columns
    label_columns = {
        'customer_name': _("Customer Name"),
        'delivery_type': _("Delivery Type") }
Run Code Online (Sandbox Code Playgroud)

我想表明Air, Land, Sea作为Delivery Types在下拉列表中。请让我知道是否可以按照我提到的做?

python sqlalchemy flask superset flask-sqlalchemy

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

为什么 SQLAlchemy 关联对象中的外键被标记为主键?

以下是sqlalchemy的文档。

注意关联类中的left_id和right_id是如何先标记为ForeignKey然后primary_key = True

对我来说,它们应该是外键是有道理的,因为从逻辑上讲,它们是其他两个父表和子表的外键。

那么让它们成为主键的目的是什么?

这里发生了什么?请解释。

class Association(Base):
    __tablename__ = 'association'
    left_id = Column(Integer, ForeignKey('left.id'), primary_key=True)
    right_id = Column(Integer, ForeignKey('right.id'), primary_key=True)
    extra_data = Column(String(50))
    child = relationship("Child", back_populates="parents")
    parent = relationship("Parent", back_populates="children")

class Parent(Base):
    __tablename__ = 'left'
    id = Column(Integer, primary_key=True)
    children = relationship("Association", back_populates="parent")

class Child(Base):
    __tablename__ = 'right'
    id = Column(Integer, primary_key=True)
    parents = relationship("Association", back_populates="child")
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

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

如何在石墨烯烧瓶中制作多个查询过滤器?

我是 GraphQL 的相对新手,我正在尝试进行这样的查询

{
   user(username: "Jon") { 
     name
     last_lame
     username
     posts(in_draft : true) { 
       title
       text
       in_draft
       update_at      
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

我想过滤用户在草稿中的帖子列表

我可以进行查询的唯一方法是通过模型的关系,但无法过滤草稿中的帖子。一对多

class User(Base):
  __tablename__ = 'user'
  id = Column(Integer, primary_key=True)
  name = Column(String)
  last_lame = Column(String)
  username = Column(String)


class Post(Base):
  __tablename__ = 'post'
  id = Column(Integer, primary_key=True)
  title = Column(String)
  text = Column(String)
  in_draft = Column(Boolean) 
  post_id = Column(Integer, ForeignKey('user.id'))

  posts = relationship("User", backref='posts')
Run Code Online (Sandbox Code Playgroud)

有了这种关系,我用“backref = 'posts'”显示了帖子节点

我的对象:

class User(SQLAlchemyObjectType):
  """User Object."""
  class Meta:
    model = UserModel …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy graphql graphene-python

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

在烧瓶中处理 Ajax 请求

我一直在学习烧瓶。我还在其中创建了两个项目。这是我的第三个项目。我总是被困在这一点上。我想让服务器端代码在页面上发生事件时运行,比如单击按钮。

在链接的图像中。我希望在单击“删除”按钮时删除该条目。我已经将数据保存在 mysql 服务器上,所以我也希望将其从那里删除

这是我所做的。我创建了一条路线/delete_student,它处理删除学生。但问题是它总是重新加载页面,并且它切换到不同的 url。我不希望它们中的任何一个发生。我该怎么办?我应该使用 Ajax,如果是,请告诉我,如何使用?

HTML

{% for i in data %}
            <tr>
                <td>{{i['roll_no']}}</td>
                <td>{{i['name']}}</td>
                <td>{{i['username']}}</td>
                <td>{{i['password']}}</td>
                <td><a href="#">Edit</a></td>
                <td><a href="{{url_for('delete_student')}}">Delete</a></td>
            </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

烧瓶

@app.route('/delete_student')
@is_logged_in
def delete_student():
if session['username']=='nitti':
    cur = mysql.connection.cursor()
    #pop the row from the table?
    #how to identify the row being deleted?
    return render_template(url_for('student_summary'))
Run Code Online (Sandbox Code Playgroud)

flask flask-sqlalchemy

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

溢出错误:无法将“int”放入索引大小的整数中

为了确保密码总是在数据库中存储、散列和加盐,我决定使用一个描述符,当提供密码时,它会自动散列密码,例如 user.password = "jinja125"。

这是我的代码

from random import SystemRandom
from backports.pbkdf2 import pbkdf2_hmac, compare_digest

# ...snip...    

@password.setter
def password(self, value):
    # When a user is first created, give them a salt
    if self._salt is None:
        self._salt = bytes(SystemRandom().getrandbits(128))
    self._password = self._hash_password(value)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行一些测试时,出现此错误。

File "C:\Users\User\flask-python\site-tracker\app\users\models.py", line 34, in password
    self._salt = bytes(random.SystemRandom().getrandbits(simple_bit_counts))
OverflowError: cannot fit 'int' into an index-sized integer
Run Code Online (Sandbox Code Playgroud)

我怎样才能最好地解决这个错误?

python flask flask-sqlalchemy

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

具有多个多对多关系的 SQLAlchemy

我想用 SQLAlchemy 为食谱创建一个数据库,但是我不确定我的方法是否正确。如何将数据插入到 recipe_ingredient 表?

我的做法:

一个食谱有一个名字,可以有多种成分。一种成分由数量、单位和名称组成(成分表),例如 500 毫升水。

表配方 - id,主键 - 名称(一个配方可以有多种成分,一种成分可以在多个配方中)

表recipe_ingredient

  • 外键(recipe.id)
  • 外键(金额.id)
  • 外键(单位.id)
  • 外键(ingredients.id)

表金额

  • id,主键
  • 金额(例如 500)

表单位

  • id,主键
  • 单位(例如毫升)

餐桌配料

  • id,主键
  • 成分(例如水)

代码:

recipe_ingredient = db.Table('recipe_ingredient',
                        db.Column('idrecipe', db.Integer, db.ForeignKey('recipe.id')),
                        db.Column('idingredient', db.Integer, db.ForeignKey('ingredients.id')),
                        db.Column('idunit', db.Integer, db.ForeignKey('units.id')),
                        db.Column('idamount', db.Integer, db.ForeignKey('amounts.id'))
)

class Recipe(db.Model):
    id= db.Column(db.Integer, primary_key=True, autoincrement=True)
    name= db.Column(db.VARCHAR(70), index=True)
    ingredient= db.relationship("Ingredients", secondary=recipe_ingredient, backref='recipe')
    amounts = db.relationship("Amounts", secondary=recipe_ingredient, backref='recipe')
    units= db.relationship("Units", secondary=recipe_ingredient , backref='recipe')

class Ingredients(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    ingredient = db.Column(db.VARCHAR(200))

class …
Run Code Online (Sandbox Code Playgroud)

sql sqlalchemy flask-sqlalchemy

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

在 Flask-SQLAlchemy 中:如何在 config.py 中设置 check_same_thread=False?

在我的 Config 类中,我想将 check_same_thread 设置为 False 如下(以避免错误:sqlalchemy.exc.ProgrammingError: (sqlite3.ProgrammingError) 在线程中创建的 SQLite 对象只能在同一个线程中使用。... ..)

class Config(object):  
    #------#
    SQLALCHEMY_DATABASE_URI = 'sqlite:///app.db?check_same_thread=False'
    #------#
Run Code Online (Sandbox Code Playgroud)

但是,在设置 Flask 应用程序的 Config 类时,我按照 Miguel Grinberg 的 Flask Mega-tutorial 设置了 SQLAlchemy 数据库,如下所示:

class Config(object): 
    #------#
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///'+os.path.join(basedir, 'app.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False
   #------#
Run Code Online (Sandbox Code Playgroud)

在上述情况下,如何将 check_same_thread 设置为 False ?任何帮助或指导将不胜感激。

谢谢!

sqlalchemy flask flask-sqlalchemy

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

使用 bulk_save_objects 获取插入的主键 ID

使用后如何获取插入的 ID(生成的主键)session.bulk_save_objects

我试过这个:

for x in y:
  obj = Post(...)
  obj_list.append(obj)

session.bulk_save_objects(obj_list)
session.commit()

for i in obj_list:
  print(i.id)
Run Code Online (Sandbox Code Playgroud)

id 是 None。行已成功插入。

flask-sqlalchemy

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

在 Flask-SQLAlchemy 中添加 __init__() 方法

我在 python 3.6.5 中使用 Flask-SQLAlchemy 并且 - 到目前为止 - 无法通过调用__init__(). 我的代码如下所示:

'''
file: models.py
'''
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class Network(db.Model):
    __tablename__ = 'network'

    id = db.Column(db.Integer, primary_key=True)
    baud_rate = db.Column(db.Integer)

    def __init__(**kwargs):
        super(Network, self).__init__(**kwargs)  # see note
Run Code Online (Sandbox Code Playgroud)

尝试实例化 Network 对象会导致错误:

>>> n = Network(baud_rate=300)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: __init__() takes 0 positional arguments but 1 was given
Run Code Online (Sandbox Code Playgroud)

这有点令人惊讶,因为我使用的是 Flask-SQLAlchemy 文档中给出的配方

如果您出于任何原因决定覆盖构造函数,请确保继续接受 **kwargs 并使用这些 **kwargs …

python flask python-3.x flask-sqlalchemy

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

Flask-SQLAlchemy , 如何查询多对多表数据

我正在使用 Flask-SQLalchemy 尝试在两个表之间建立多对多关系,这里是关系代码。

port_trades = db.Table(
    'port_trades',
    db.Column('portfolio_id', db.Text, db.ForeignKey('portfolio.portfolio_id'), primary_key=True),
    db.Column('trade_id', db.Text, db.ForeignKey('trade.trade_id'), primary_key=True)
    )

class Portfolio(db.Model):

    __tablename__ = 'portfolio'
    user_id = db.Column(db.Text, primary_key=True)
    portfolio_id = db.Column(db.Text, primary_key=True)
    portfolio_name = db.Column(db.Text)
    trade_id = db.Column(db.Text, primary_key=True)

    trades = db.relationship('Trade', secondary=port_trades,  backref=db.backref('trades', lazy='dynamic'))

    def __repr__(self):
        return '[%r,%r,%r,%r]' % (self.user_id, self.portfolio_id, self.portfolio_name, self.trade_id)

class Trade(db.Model):
    __tablename__ = 'trade'
    trade_id = db.Column(db.Text, primary_key=True)
    user_id = db.Column(db.Text, primary_key=True)
    instrument = db.Column(db.Text)
    trade_type = db.Column(db.Text, primary_key=True)
    product_name = db.Column(db.Text)

    portfolios = db.relationship('Portfolio', secondary=port_trades, backref=db.backref('portfolios', lazy='dynamic')) …
Run Code Online (Sandbox Code Playgroud)

flask-sqlalchemy

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