我是烧瓶的新手,我想将下拉列表添加到具有预定义值的表单中(不是从数据库中获取)。我创建了一个模型如下。
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在下拉列表中。请让我知道是否可以按照我提到的做?
以下是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) 我是 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) 我一直在学习烧瓶。我还在其中创建了两个项目。这是我的第三个项目。我总是被困在这一点上。我想让服务器端代码在页面上发生事件时运行,比如单击按钮。
在链接的图像中。我希望在单击“删除”按钮时删除该条目。我已经将数据保存在 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) 为了确保密码总是在数据库中存储、散列和加盐,我决定使用一个描述符,当提供密码时,它会自动散列密码,例如 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)
我怎样才能最好地解决这个错误?
我想用 SQLAlchemy 为食谱创建一个数据库,但是我不确定我的方法是否正确。如何将数据插入到 recipe_ingredient 表?
我的做法:
一个食谱有一个名字,可以有多种成分。一种成分由数量、单位和名称组成(成分表),例如 500 毫升水。
表配方 - id,主键 - 名称(一个配方可以有多种成分,一种成分可以在多个配方中)
表recipe_ingredient
表金额
表单位
餐桌配料
代码:
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) 在我的 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 ?任何帮助或指导将不胜感激。
谢谢!
使用后如何获取插入的 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。行已成功插入。
我在 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 …
我正在使用 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 ×10
flask ×6
python ×5
sqlalchemy ×4
graphql ×1
python-3.x ×1
sql ×1
superset ×1