我正在 Python 3.10 上运行一个通用的(因为我不知道做任何超出基础知识的事情)Flask-SQLAlchemy 3.0.2 设置。
不知道发生了什么,但在某个时候,每次我尝试查询数据库时它都会开始抛出此错误:
AttributeError: module 'psycopg2' has no attribute 'paramstyle'
我正在通过诗歌进行包管理,并且 SQLAlchemy 1.4.44 确实想使用 psycopg2 2.7,我猜它早于日期paramstyle。
我正在使用Flask及其SQLAlchemy扩展.我需要定义几个模型类,它们将在MySQL数据库中创建表.这些表只会因名称而不同,其中的所有字段名称/数据类型都是相同的.如何为所有这些表定义类?我正在考虑继承,但我不确定我究竟会这样做.
我试图根据这些表中的技能查询用户.
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
username = db.Column(db.String(64), unique=True, index=True)
skills = db.relationship('Skill', backref='author', lazy='dynamic')
Run Code Online (Sandbox Code Playgroud)
class Skill(db.Model):
__tablename__ = 'skills'
id = db.Column(db.Integer, primary_key=True)
skill = db.Column(db.String(64), index=True)
author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
Run Code Online (Sandbox Code Playgroud)
我在用户表中尝试了这个并得到了这个错误.
@classmethod
def users_by_skill(cls, skill):
return User.query.join(Skill).filter(skill.skill).all()
Run Code Online (Sandbox Code Playgroud)
AttributeError: 'str' object has no attribute 'skill'
Run Code Online (Sandbox Code Playgroud)
我错过了哪里?
您好我在flask-sqlalchemy加入了一个问题.我是数据库和烧瓶的初学者.
这些是我的课程:
class Shopping(db.Model):
__tablename__ = 'shoppings'
id = db.Column(db.Integer, primary_key=True)
product_name = db.Column(db.String(30), index=True, unique=False)
price=db.Column(db.Float(10), index=True)
date=db.Column(db.Date())
s_type_id = db.Column(db.Integer, db.ForeignKey('shopping_types.id'))
def __repr__(self):
return 'Alisveris yeri :{0} Tutar :{1} Tarih: {2}'.format(self.product_name,self.price,self.date)
def __list__(self):
return [self.product_name,self.price,self.date]
class Shopping_Type(db.Model):
__tablename__='shopping_types'
id=db.Column(db.Integer,primary_key=True)
type_name=db.Column(db.String(30), index=True, unique=True)
types = db.relationship('Shopping', backref = 'shopping_types', lazy = 'dynamic')
def __repr__(self):
return '{0}'.format(self.type_name)
Run Code Online (Sandbox Code Playgroud)
当我尝试python终端并运行:
select shoppings.product_name ,shoppings.price, shoppings.date, shopping_types.type_name from shoppings join shopping_types ON shoppings.s_type_id=shopping_types.id
Run Code Online (Sandbox Code Playgroud)
询问
我得到了我想要的但是当我运行flask-sqlalchemy命令时:
rslt=db.session.query(spng).join(st)
spng:Shopping(class)
st:Shopping_Type(class)
Run Code Online (Sandbox Code Playgroud)
我只获得购物数据.我想购买Shopping + Shopping_Type数据.
谢谢.
我有两个模型:
class Project(db.Model):
__tablename__ = 'project'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
timestamp = db.Column(db.DateTime)
info = db.Column(db.Text(255))
post = db.relationship('Post', backref=db.backref('projects'))
class Post(db.Model):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True)
headline = db.Column(db.String(64))
content = db.Column(db.Text(255))
timestamp = db.Column(db.DateTime)
projectId = db.Column(db.Integer, db.ForeignKey('project.id'))
Run Code Online (Sandbox Code Playgroud)
例如,如果我创建一个post实例,然后通过projectInstance.append(post(headline="...", content="..."))
Now 将其附加到项目中,则我想更新该post所属的项目。除了查询所需的项目,将帖子附加到该项目并将其从旧项目中删除,还有没有更简单的方法?
oldProject.remove(post)
newProject.append(post)
Run Code Online (Sandbox Code Playgroud) 一个简单的查询看起来像这样
User.query.filter(User.name == 'admin')
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我需要检查正在传递的参数,然后根据该参数从数据库中过滤结果。
例如,如果User表包含诸如用户名,位置和电子邮件之类的列,则request参数可以包含其中之一,也可以具有列的组合。我不想创建如下所示的每个参数并链接过滤器,而是创建一个动态查询字符串,该查询字符串可以传递给一个过滤器并返回结果。我想创建一个单独的函数,该函数将评估所有参数并生成查询字符串。一旦生成查询字符串,我就可以传递该查询字符串对象并获得所需的结果。我想避免使用RAW SQL查询,因为它违反了使用ORM的目的。
if location:
User.query.filter(User.name == 'admin', User.location == location)
elif email:
User.query.filter(User.email == email)
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) 我正在尝试使用SQLite数据库为我的flask应用程序启用服务器端会话。注意我使用的是Flask-Sessionstore,它是Flask-Session的硬分叉,并且得到了更积极的维护。但是,当我同时使用两个库时,都会遇到相同的错误。这是我的代码app.py:
from flask import Flask, session
from flask_sqlalchemy import SQLAlchemy
from flask_sessionstore import Session
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////Users/Johnny/DBs/test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # quiet warning message
app.config['SESSION_TYPE'] = 'sqlalchemy'
Session(app)
@app.route('/')
def index():
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,python app.py一切都会启动并按预期运行。但是,当我尝试访问位于http://127.0.0.1:5000的索引页时,出现以下错误:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: sessions [SQL: 'SELECT sessions.id AS sessions_id, sessions.session_id AS sessions_session_id, sessions.data AS sessions_data, sessions.expiry AS sessions_expiry \nFROM sessions \nWHERE sessions.session_id = ?\n …Run Code Online (Sandbox Code Playgroud) flask-sqlalchemy ×10
python ×10
flask ×6
sqlalchemy ×6
enums ×1
join ×1
mysql ×1
postgresql ×1
psycopg2 ×1
session ×1
sqlite ×1