我首先应该提到我通过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)
有人能告诉我如何才能让它发挥作用吗?我也尝试了以下模型,但这也行不通.同样的错误. …
我在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 …
我很难让我的应用程序运行.每当我尝试在包中分离模块时,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) 我读过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?
我正在使用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.
我有一个模型,其日期列定义为:
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(时区=假)
因为我希望存储没有时区.
我需要有一个与两个用户关联的帖子.作者和主持人.我这个代码没有成功
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) 我无法用Flask-SQLAlchemy或Flask-Pagination执行分页,或者.我不确定如何初始化分页,设置页面,确定页面,输入等等.我来自PHP,对Python来说很新.
我在查询数据库中的所有帖子
posts = Posts.query.order_by(Posts.time.desc()).all()
Run Code Online (Sandbox Code Playgroud)
我一直在看下面的例子:
我真的很困惑,我发现的信息在文章之间差别很大.这让我感到困惑,不知道从哪里开始.我想查询数据库表的所有行,将结果限制为20和分页.我没有清楚地看到这一点.
我尝试CURD使用Flask和SQLAlchemy.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) 我有一个具有依赖于其它列的值一列,按照该指令的数据模型,这个页面,我创建了用于确定在创建这个特定列,像这样的值上下文敏感的功能:
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) flask-sqlalchemy ×10
python ×9
flask ×8
sqlalchemy ×6
flask-admin ×1
mysql ×1
postgresql ×1
python-3.x ×1