标签: flask-sqlalchemy

SqlAlchemy不接受DateTime列中的datetime.datetime.now值

我首先应该提到我通过Flask-SqlAlchemy使用SqlAlchemy.我不相信这会影响这个问题,但如果确实如此,请告诉我.

以下是我在SqlAlchemy中运行create_all函数时收到的错误消息的相关部分

InterfaceError: (InterfaceError) Error binding parameter 4 - probably unsupported type. u'INSERT INTO podcasts (feed_url, title, url, last_updated, feed_data) VALUES (?, ?, ?, ?, ?)' (u'http://example.com/feed', u'Podcast Show Title', u'http://example.com', '2012-04-17 20:28:49.117000'

这是我的模型:

class Podcast(db.Model):
    import datetime
    __tablename__ = 'podcasts'
    id = db.Column(db.Integer, primary_key=True)
    feed_url = db.Column(db.String(150), unique=True)
    title = db.Column(db.String(200))
    url = db.Column(db.String(150))
    last_updated = db.Column(db.DateTime, default=datetime.datetime.now)
    feed_data = db.Column(db.Text)

    def __init__(self, feed_url):
        import feedparser

        self.feed_url = feed_url
        self.feed_data = feedparser.parse(self.feed_url)
        self.title = self.feed_data['feed']['title']
        self.url = self.feed_data['feed']['link']
Run Code Online (Sandbox Code Playgroud)

有人能告诉我如何才能让它发挥作用吗?我也尝试了以下模型,但这也行不通.同样的错误. …

python sqlalchemy flask-sqlalchemy

13
推荐指数
3
解决办法
2万
查看次数

无法在Flask-admin上创建模型

我在Flask上创建了一个简单的博客,我正在尝试使用Flask-Admin来管理我的帖子.如果我去管理区域,我可以看到来自数据库的所有帖子的列表,但是当我尝试创建一个新帖子时,我得到了下一个错误:

Failed to create model. __init__() takes exactly 4 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

这是我的帖子模型:

class Post(db.Model):
    __tablename__ = 'news'
    nid = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)
    created_at = db.Column(db.DateTime)

    def __init__(self, title, content):
        self.title = title.title()
        self.content = content
        self.created_at = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)

这是我将模型添加到UI的代码:

from flask import Flask, session
from models import db, Post
from flask.ext.admin import Admin
from flask.ext.admin.contrib.sqlamodel import ModelView

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:pass@localhost/appname'
db.init_app(app)

admin = Admin(app)
admin.add_view(ModelView(Post, db.session))
Run Code Online (Sandbox Code Playgroud)

我可以通过管理面板编辑模型,但不能创建新模型.我知道我错过了一些非常愚蠢的东西,但我无法弄清楚它是什么.

编辑:如果我没有在模型上实现init …

python flask flask-sqlalchemy flask-extensions

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

使用SQLAlchemy正确地将Model与应用程序分离的Pythonic方法

我很难让我的应用程序运行.每当我尝试在包中分离模块时,Flask-SQLAlchemy扩展会创建一个空数据库.为了更好地解释我在做什么,让我展示我的项目是如何构建的:

Project
|
|-- Model
|   |-- __init__.py
|   |-- User.py
|
|-- Server
|   |-- __init__.py
|
|-- API
|   |-- __init__.py
Run Code Online (Sandbox Code Playgroud)

这个想法很简单:我想为我的模型创建一个包,因为我不喜欢在单个包中传播代码,并且单独的"子"项目(如API),因为将来我会更好地使用蓝图隔离子应用程序.

代码很简单:

一,Model.__init__.py:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
Run Code Online (Sandbox Code Playgroud)

请注意,我创建它只是为了使用SQLAlchemy()整个包中的单个对象.不,我们去Model.User

from Model import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(80))
    Age = db.Column(db.Integer)
    ...
Run Code Online (Sandbox Code Playgroud)

再次注意我用过的模型导入数据库允许相同的数据库对象.

最后,Server.__init__.py这样做:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import Model, API
db = Model.db


def main():
    app = Flask("__main__")
    db = …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy

13
推荐指数
2
解决办法
9740
查看次数

如何将flask-sqlalchemy与现有的sqlalchemy模型一起使用?

我读过flask-sqlalchemy或sqlalchemy,建议使用flask-sqlalchemy和flask.我想要遵循这种方法.

但是,我有一个为命令行脚本编写的现有模型,它基于sqlalchemy的declarative_base,例如,

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()   # create sqlalchemy Base class
              :
class Runner(Base):
    etc.
Run Code Online (Sandbox Code Playgroud)

我希望仍然可以在此模型中使用命令行脚本,但也希望围绕模型构建Web应用程序.

有没有办法扩展现有模型,以获得使用flask-sqlalchemy扩展的好处?或者我应该自己动手,并使用sqlalchemy的ScopedSession?

python sqlalchemy flask flask-sqlalchemy

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

SQLAlchemy:如何在不将其作为主键的情况下创建整数列auto_increment(和unique)?

我正在使用Flask扩展来为SQLAlchemy定义我的数据库模型.我希望id列是int类型并具有auto_increment属性但不使其成为主键.我该如何实现?

我试过这个:

from flask import Flask, jsonify
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:ajay@localhost/pydb'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)

class Scenario(db.Model):
    scid = db.Column(db.Integer, nullable=False, unique=True, autoincrement=True)
    scenario_name = db.Column(db.String(100), primary_key=True)
    scenario_description = db.Column(db.String(200), nullable=False)
    image_id = db.Column(db.Integer, db.ForeignKey('images.id', onupdate='CASCADE', ondelete='CASCADE'))

    def __init__(self, scenario_name, scenario_description, image_id=None):
        self.scenario_name = scenario_name
        self.scenario_description = scenario_description
        self.image_id = image_id

    def __repr__(self):
        return '<Scenario %r, %r, %r>' % (self.scenario_name, self.scenario_description, self.image_id)
Run Code Online (Sandbox Code Playgroud)

但是这不会将scid列设置为auto_increment.

python mysql auto-increment flask flask-sqlalchemy

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

SQLAlchemy如何使用timezone = UTC加载日期(没有时区存储的日期)

我有一个模型,其日期列定义为:

created_on = db.Column(db.DateTime, default=db.func.now(), nullable=False)
Run Code Online (Sandbox Code Playgroud)

日期与tz_info = None,这是正确的,因为日期存储没有时区信息.

如果我打印日期:

print(my_object.created_on.isoformat())
Run Code Online (Sandbox Code Playgroud)

我得到这种格式

2014-04-26T17:46:27.353936
Run Code Online (Sandbox Code Playgroud)

我想要一个UTC时区指标,例如:

2014-04-26T17:46:27.353936Z
Run Code Online (Sandbox Code Playgroud)

有没有办法在架构配置中定义此行为?

SQLAlchemy有,timezone = Boolean

sqlalchemy.types.DateTime(时区=假)

因为我希望存储没有时区.

python sqlalchemy flask-sqlalchemy

13
推荐指数
2
解决办法
7545
查看次数

一个对象是同一个表的两个外键

我需要有一个与两个用户关联的帖子.作者和主持人.我这个代码没有成功

class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    ...
    post = db.relationship('Post', foreign_keys=['posts.id'], backref='post_user', lazy='dynamic')
    post_blame = db.relationship('Post', foreign_keys=['posts.moderated_by'], backref='post_blame', lazy='dynamic')    

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    ...
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    moderated_by = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
Run Code Online (Sandbox Code Playgroud)

错误:

ArgumentError: Column-based expression object expected for argument 'foreign_keys'; got: 'posts.id', type <class 'str'>
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy flask flask-sqlalchemy

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

Python Flask SQLAlchemy Pagination

我无法用Flask-SQLAlchemy或Flask-Pagination执行分页,或者.我不确定如何初始化分页,设置页面,确定页面,输入等等.我来自PHP,对Python来说很新.

我在查询数据库中的所有帖子

posts = Posts.query.order_by(Posts.time.desc()).all()
Run Code Online (Sandbox Code Playgroud)

我一直在看下面的例子:

我真的很困惑,我发现的信息在文章之间差别很大.这让我感到困惑,不知道从哪里开始.我想查询数据库表的所有行,将结果限制为20和分页.我没有清楚地看到这一点.

python sqlalchemy flask flask-sqlalchemy flask-wtforms

13
推荐指数
2
解决办法
2万
查看次数

SQLALCHEMY_DATABASE_URI未设置

我尝试CURD使用FlaskSQLAlchemy.But Error连接到数据库时进行操作.

这是Error日志.

/usr/local/lib/python3.4/dist-packages/flask_sqlalchemy/__init__.py:819: UserWarning: SQLALCHEMY_DATABASE_URI not set. Defaulting to "sqlite:///:memory:".
  'SQLALCHEMY_DATABASE_URI not set. Defaulting to '
/usr/local/lib/python3.4/dist-packages/flask_sqlalchemy/__init__.py:839: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
Run Code Online (Sandbox Code Playgroud)

这是我的代码和设置

# database.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
sqldb = SQLAlchemy(app)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:root@localhost/myDbName"


# create …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask python-3.x flask-sqlalchemy

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

Flask-Admin使用SQLAlchemy上下文相关函数创建视图

我有一个具有依赖于其它列的值一列,按照该指令的数据模型,这个页面,我创建了用于确定在创建这个特定列,像这样的值上下文敏感的功能:

def get_column_value_from_context(context):
    # Instructions to produce value

    return value


class MyModel(db.Model):
    id = db.Column(db.Integer,
                   primary_key=True)
    my_column = db.Column(db.String(64),
                          nullable=False,
                          default=get_column_value_from_context)
    name = db.Column(db.String(32),
                     nullable=False,
                     unique=True,
                     index=True)
    title = db.Column(db.String(128),
                      nullable=False)
    description = db.Column(db.String(256),
                            nullable=False)
Run Code Online (Sandbox Code Playgroud)

这种方法非常不错,我可以从命令行或使用脚本创建没有问题的行.

我还ModelView使用Flask-Admin在应用程序中添加了一个:

class MyModelView(ModelView):
    can_view_details = True
    can_set_page_size = True
    can_export = True


admin.add_view(MyModelView(MyModel, db.session))
Run Code Online (Sandbox Code Playgroud)

在我单击列表视图中的" 创建"按钮之前,这也很有效.我收到此错误:

AttributeError:'NoneType'对象没有属性'get_current_parameters'

因为在这里执行create_model处理程序ModelView这样的:

def create_model(self, form):
    """
        Create model from form.
        :param form:
            Form instance
    """ …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-admin

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