标签: sqlalchemy

搜索功能(Flask中的查询,SQLAlchemy)

我是编程和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)

python sqlite sqlalchemy flask

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

Flask-SQLAlchemy按关系属性查询记录

在我一直在研究的应用程序中,使用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 …

python sqlalchemy flask flask-sqlalchemy

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

Sqlalchemy枚举迁移更新失败,说不存在

我有以下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)

python postgresql enums sqlalchemy flask-sqlalchemy

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

Alembic试图删除我的表

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)

python sqlalchemy alembic

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

跨多个SQLAlchemy多对多查询

我正在使用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)

python sqlalchemy

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

不区分大小写的SQLAlchemy完全匹配

如何确保=运算符始终不区分大小写?与LOWERUPPER函数进行比较是提高性能的最佳选择吗?ILIKE似乎很慢。

database performance sqlalchemy string-comparison

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

SQLAlchemy列名带有空格

我正在尝试过滤包含空格的列上的表。

...
events = database_session.query(table)
events.filter(table.column with space == 'xvalue')   < -- I want to do that
...
Run Code Online (Sandbox Code Playgroud)

可以肯定有一种简单的方法,但是我似乎在任何地方都找不到。

python sqlalchemy

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

使用sqlalchemy语句和表达式api产生多个联接

考虑您具有以下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)

python mysql join sqlalchemy python-3.x

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

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
查看次数

使用SQLAlchemy在关联表中插入数据时出现IntegrityError

我正在尝试在此关联表中插入角色数据:

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)

python sqlalchemy

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