如何使用Flask-SQLAlchemy删除单个表中的所有行?
寻找这样的东西:
>>> users = models.User.query.all()
>>> models.db.session.delete(users)
# but it errs out: UnmappedInstanceError: Class '__builtin__.list' is not mapped
Run Code Online (Sandbox Code Playgroud) 我是烧瓶和sqlalchemy的新手,我刚刚开始研究烧瓶应用程序,我现在正在使用sqlalchemy.我想知道使用flask-sqlalchemy vs sqlalchemy是否有任何重大好处.我在http://packages.python.org/Flask-SQLAlchemy/index.html找不到足够的动机,或者我不明白这个价值!非常感谢您的澄清.
我正在尝试使用 SQLAlchemy 连接到 Postgres 数据库。我已经安装了 psycopg2。但是,我收到错误sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres。如何配置 SQLAlchemy 以连接到 PostgreSQL?
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "postgres://username@localhost:5432/template1"
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud) Flask-SQLAlchemy插件的快速入门教程指示用户创建继承db.Model该类的表模型,例如
app = Flask(__main__)
db = SQLAlchemy(app)
class Users(db.Model):
__tablename__ = 'users'
...
Run Code Online (Sandbox Code Playgroud)
但是,SQLAlchemy教程和bottle-SQLAlchemy 自述文件都建议表模型继承Base实例化declarative_base().
Base = declarative_base()
class Users(Base):
__tablename__ = 'users'
...
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别?
我正在尝试使用Blueprints在Flask中创建一个"模块化应用程序".
但是,在创建模型时,我遇到了必须引用应用程序以获取dbFlask-SQLAlchemy提供的对象的问题.我希望能够使用多个应用程序的蓝图(类似于Django应用程序的使用方式),所以这不是一个好的解决方案.*
db实例,然后应用程序将其与蓝图的其余部分一起导入.但是,任何其他希望创建模型的蓝图都需要从该蓝图而不是应用程序导入.我的问题是这样的:
编辑:我现在一直在考虑这个问题,这可能与SQLAlchemy有关,而不是Flask,因为你必须
declarative_base()在声明模型的时候.和多数民众赞成得从什么地方来的,反正!也许最好的解决方案是将项目的模式定义在一个地方并将其展开,就像Ruby on Rails一样.声明式SQLAlchemy类定义实际上更像是schema.rb而不是Django的models.py.我想这也可以更容易地使用迁移(来自alembic或sqlalchemy-migrate).
我被要求提供一个例子,所以让我们做一些简单的事情:说我有一个描述"flatpages"的蓝图 - 存储在数据库中的简单"静态"内容.它使用一个只有短名称(用于URL),标题和正文的表.这是simple_pages/__init__.py:
from flask import Blueprint, render_template
from .models import Page
flat_pages = Blueprint('flat_pages', __name__, template_folder='templates')
@flat_pages.route('/<page>')
def show(page):
page_object = Page.query.filter_by(name=page).first()
return render_template('pages/{}.html'.format(page), page=page_object)
Run Code Online (Sandbox Code Playgroud)
然后,让这个蓝图定义自己的模型(这个simple_page/models.py)会很好:
# TODO Somehow get ahold of a `db` instance without referencing the app
# I …Run Code Online (Sandbox Code Playgroud) 我已经有一个现有的数据库,里面有很多表和很多数据MySQL.我打算创建一个Flask应用程序并使用sqlalchemy.现在我问了irc并在google上四处寻找并尝试了以下想法:
首先,我使用sqlacodegen从我的生成模型DB.但后来我对此感到困惑,看了一下.我找到了这个.
这看起来像一个优雅的解决方案
所以其次,我models.py根据那里的解决方案改写了我,现在我更加困惑.我正在寻找最好的方法来构建这个烧瓶应用程序以及现有的数据库.
我查看了烧瓶文档但是对于已经存在的db的项目没有真正得到任何帮助.从头开始创建内容有很多好东西,创建数据库和所有内容.但我真的很困惑.
请注意它是我的第一天Flask,但我有经验Django,所以基本概念不是障碍.我需要一些指导来为这个用例选择最佳方法.非常感谢详细解释.通过详细说明我绝对不希望有人写下所有的代码和勺子喂我这个,但足以让我开始,这是将这个数据库无缝地集成到flaskvia中sqlalchemy.注意我的数据库在MySQL.
我试图在Flask-SQLAlchemy中建立多对多关系,但似乎我不知道如何填充"多对多标识符数据库".你能帮我理解我做错了什么以及应该怎么看?
class User(db.Model):
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
user_fistName = db.Column(db.String(64))
user_lastName = db.Column(db.String(64))
user_email = db.Column(db.String(128), unique=True)
class Class(db.Model):
__tablename__ = 'classes'
class_id = db.Column(db.Integer, primary_key=True)
class_name = db.Column(db.String(128), unique=True)
Run Code Online (Sandbox Code Playgroud)
然后我的标识符数据库:
student_identifier = db.Table('student_identifier',
db.Column('class_id', db.Integer, db.ForeignKey('classes.class_id')),
db.Column('user_id', db.Integer, db.ForeignKey('users.user_id'))
)
Run Code Online (Sandbox Code Playgroud)
到目前为止,当我尝试将数据插入数据库时,它看起来像这样.
# User
user1 = User(
user_fistName='John',
user_lastName='Doe',
user_email='john@doe.es')
user2 = User(
user_fistName='Jack',
user_lastName='Doe',
user_email='jack@doe.es')
user3 = User(
user_fistName='Jane',
user_lastName='Doe',
user_email='jane@doe.es')
db.session.add_all([user1, user2, user3])
db.session.commit()
# Class
cl1 = Class(class_name='0A')
cl2 = …Run Code Online (Sandbox Code Playgroud) 我无法在python中找到一个模块,尽管easy_install说已经安装了.任何想法如何解决这个问题?
$ python -c "from flaskext.sqlalchemy import SQLAlchemy"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named sqlalchemy
$ python -V
Python 2.7
$ sudo easy_install sqlalchemy
Searching for sqlalchemy
Best match: SQLAlchemy 0.7.7
Adding SQLAlchemy 0.7.7 to easy-install.pth file
Using /usr/lib/python2.7/site-packages
Processing dependencies for sqlalchemy
Finished processing dependencies for sqlalchemy
Run Code Online (Sandbox Code Playgroud)
$ sudo pip install SQLAlchemy --upgrade要求已经是最新的:/usr/lib/python2.7/site-packages中的SQLAlchemy清理...
虽然pip说已经安装了.但我在sys.path输出中找不到它们.
$ sudo python -c "import sys;print sys.path" ['',
'/usr/lib/python2.7/site-packages/Flask_SQLAlchemy-0.15-py2.7.egg',
'/usr/lib/python2.7/site-packages/Flask-0.8-py2.7.egg',
'/usr/lib/python2.7/site-packages/Jinja2-2.6-py2.7.egg',
'/usr/lib/python2.7/site-packages/Werkzeug-0.8.3-py2.7.egg',
'/usr/lib/python2.7/site-packages/Flask_WTF-0.5.2-py2.7.egg',
'/usr/lib/python2.7/site-packages/WTForms-0.6.3-py2.7.egg',
'/usr/lib/python2.7/site-packages/Flask_Mail-0.6.1-py2.7.egg',
'/usr/lib/python2.7/site-packages/blinker-1.2-py2.7.egg', …Run Code Online (Sandbox Code Playgroud) 我有以下查询:
profiles = session.query(profile.name).filter(and_(profile.email == email, profile.password == password_hash))
Run Code Online (Sandbox Code Playgroud)
如何检查是否有一行,如何返回第一行(如果匹配则应该只有一行)?
我正在使用Flask在论坛模板上工作.当我尝试使用表单在浏览器中创建新线程时,SQLAlchemy会抛出AttributeError.当我尝试与Forum-to-Thread实现一对多的关系以及与Thread-to-User的一对多关系时,问题出现了.
models.py
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(32), index=True, unique=True)
password = db.Column(db.String(32), index=True)
email = db.Column(db.String(120), index=True, unique=True)
role = db.Column(db.SmallInteger, default=ROLE_USER)
posts = db.relationship('Post', backref='author', lazy='dynamic')
class Forum(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(128))
description = db.Column(db.Text)
threads = db.relationship('Thread', backref='forum', lazy='dynamic')
class Thread(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(128))
author= db.Column(db.String(32))
timestamp = db.Column(db.DateTime)
forum_id = db.Column(db.Integer, db.ForeignKey('forum.id'))
posts = db.relationship('Post', backref='thread', lazy='dynamic')
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.Text) …Run Code Online (Sandbox Code Playgroud) flask-sqlalchemy ×10
python ×10
sqlalchemy ×9
flask ×7
bottle ×1
mysql ×1
one-to-many ×1
postgresql ×1
psycopg2 ×1