我是编程和Flask的新手,但我一直陷在这个问题上。
我正在尝试在Web应用程序中实现搜索功能,该功能将从表单中获取数据并将其与数据库中的值进行比较并列出结果。
这是我到目前为止的内容:
views.py
@app.route('/search', methods=['GET', 'POST'])
def search():
searchForm = searchForm()
courses = models.Course.query.order_by(models.Course.name).all()
if searchForm.validate_on_submit():
for i in courses:
if searchForm.courseName.data == i.name:
searchResult = models.Course.filter(Course.name.like('%searchForm.courseName.data%'))
return render_template('courselist.html', courses = courses, searchResult = searchResult)
Run Code Online (Sandbox Code Playgroud)
表格
class searchForm(Form):
courseName = StringField('Search course', validators=[DataRequired(), Length(max=60)])
Run Code Online (Sandbox Code Playgroud)
数据库模型
class Course(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(40), unique=True)
courseCode = db.Column(db.String(10), unique=True)
duration = db.Column(db.Integer)
maxStudents = db.Column(db.Integer)
startDate = db.Column(db.DateTime)
prerequisites = db.Column(db.String(500))
trainerID = db.Column(db.Integer, db.ForeignKey('trainer.id'))
venueID = db.Column(db.Integer, db.ForeignKey('venue.id')) …Run Code Online (Sandbox Code Playgroud) 在我一直在研究的应用程序中,使用Flask-User及其建议的模型进行授权控制。这是一个例子:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
# User Authentication information
username = db.Column(db.String(50), nullable=False, unique=True)
password = db.Column(db.String(255), nullable=False, default='')
# User Email information
email = db.Column(db.String(255), nullable=False, unique=True)
confirmed_at = db.Column(db.DateTime())
# User information
is_enabled = db.Column(db.Boolean(), nullable=False, default=False)
# Relationships
roles = db.relationship('Role', secondary='user_roles',
backref=db.backref('users', lazy='dynamic'))
class Role(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(50), unique=True)
class UserRoles(db.Model):
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE'))
role_id = db.Column(db.Integer(), db.ForeignKey('role.id', ondelete='CASCADE'))
Run Code Online (Sandbox Code Playgroud)
另外,作为Flask-User / Flask-Login的一部分,current_user …
我有以下sqlalchemy模型:
class Cart(db.Model):
__tablename__ = 'carts'
#...
cart_status = db.Column(db.Enum('confirmed', 'canceled', name='cart_statuses'))
Run Code Online (Sandbox Code Playgroud)
哪个生成以下迁移脚本:
"""empty message
Revision ID: c7cbe7d1d686
Revises: 56e9612a77ee
Create Date: 2017-06-21 08:52:00.987769
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'c7cbe7d1d686'
down_revision = '56e9612a77ee'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('carts', sa.Column('cart_status', sa.Enum('confirmed', 'canceled', name='cart_statuses'), nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### …Run Code Online (Sandbox Code Playgroud) Alembic初学者在这里。我在尝试删除已创建的表时遇到一些与Alembic有关的问题。我不知道发生了什么。现在我有一个数据库,看起来像这样:
如果运行alembic upgrade head,我将得到以下结果:
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
Run Code Online (Sandbox Code Playgroud)
如果我运行alembic history,则会得到以下结果,这是正确的:
c2659db918a9 -> 765c30f7078c (head), creat table views
c4a0cac54f89 -> c2659db918a9, Made last_update not null for all tables
19dd9f3d1d16 -> c4a0cac54f89, Added last_update field defaulted to now
77c03ebb393b -> 19dd9f3d1d16, Added indexes to each table
0737825277d8 -> 77c03ebb393b, Change foreign key columns to non-nullable
5eb3c5f7f599 -> 0737825277d8, Rename a column in daily_etf_underlying table
0da0b2a43172 -> 5eb3c5f7f599, Add extra_info column to …Run Code Online (Sandbox Code Playgroud) 我正在使用SQLAlchemy为以下概念建模:
member_of一个组members并且可以提供access_to多个用户Nodes。accessed_by多个Groups我正在使用关联表模式为用户->组和节点->组创建多对多关系。
下面的代码(我正在使用Flask-SQLAlchemy,这就是为什么我有db.Model等的原因)
如何查询用户所属的所有组均可访问的所有节点?
这是对象模型
group_access = Table('access', db.metadata,
Column('group_id', Integer, ForeignKey('groups.group_id')),
Column('nid', BigInteger, ForeignKey('nodes.nid')),
)
group_membership = Table('membership', db.metadata,
Column('group_id', Integer, ForeignKey('groups.group_id')),
Column('uid', Integer, ForeignKey('users.id')),
)
edges = Table('edges', db.metadata,
Column('src_id', BigInteger, ForeignKey('nodes.nid'), primary_key=True),
Column('dest', BigInteger, ForeignKey('nodes.nid'), primary_key=True),
)
class User(db.Model):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
email = Column(String, unique=True, nullable=False)
member_of = relationship("Group", secondary=group_membership, back_populates='members')
def __init__(self, email):
self.email = email
class …Run Code Online (Sandbox Code Playgroud) 如何确保=运算符始终不区分大小写?与LOWER或UPPER函数进行比较是提高性能的最佳选择吗?ILIKE似乎很慢。
我正在尝试过滤包含空格的列上的表。
...
events = database_session.query(table)
events.filter(table.column with space == 'xvalue') < -- I want to do that
...
Run Code Online (Sandbox Code Playgroud)
可以肯定有一种简单的方法,但是我似乎在任何地方都找不到。
考虑您具有以下sql来表示:
SELECT user.id, user.name FROM user
JOIN address ON user.id = address.user_id
现在具有以下orm模型:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String
class Address(Base):
__tablename__ = 'address'
id = Column(Integer, primary_key=True)
address_name = Column(String(64))
user_id = Column(Integer)
class PostalCode(Base):
__tablename__ = 'postal_code'
id = Column(Integer, primary_key=True)
code = Column(Integer)
Run Code Online (Sandbox Code Playgroud)
在进行简单连接时,例如:
from sqlalchemy import select, join
u = User
add = Address …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) 我正在尝试在此关联表中插入角色数据:
class Association(db.Model):
__tablename__ = 'associations'
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
team_id = db.Column(db.Integer, db.ForeignKey('teams.id'), primary_key=True)
role = db.Column(db.String)
user = db.relationship("User", back_populates="teams")
team = db.relationship("Team", back_populates="users")
Run Code Online (Sandbox Code Playgroud)
它链接到另外两个表:
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String)
username = db.Column(db.String, nullable=False, unique=True, index=True)
password_hash = db.Column(db.String)
teams = db.relationship("Association", back_populates="user")
class Team(db.Model):
__tablename__ = 'teams'
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String)
player = db.Column(db.String)
users = db.relationship("Association", back_populates="team")
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在关联表中插入角色时:
t = Team.query.filter_by(id=team_name1_id).first()
a …Run Code Online (Sandbox Code Playgroud) sqlalchemy ×10
python ×9
flask ×2
alembic ×1
database ×1
enums ×1
join ×1
mysql ×1
performance ×1
postgresql ×1
python-3.x ×1
sqlite ×1