我有一个清单: scope_list = ['prd1 rls1', ' prd1 rls1 rls3 rls2']
我想创建一个基于scope_listSQL 的过滤器看起来像:
(product=prd1 AND `release` in (rls1)) OR (product=prd1 AND release in (rls1 ,rls3, rls2))
Run Code Online (Sandbox Code Playgroud)
知道值的数量scope_list有所不同,而且我以前不知道它.这就是我想动态管理过滤器的原因scope_list.
在SQL Alchemy中我想我应该做这样的事情:
session.query(my_table).filter(or_(and_(my_table.product==%s,mytable.release.in_(%s))) for element.split() in scope_list)
Run Code Online (Sandbox Code Playgroud)
我刚开始学习SQL Alchemy,任何帮助都会非常感激.
我有一些文件和有关它们的信息在SQL数据库中.对于给定的文件组,它们将共享共同的gallery_id(文本)和不同的upload_time(日期时间).我正在尝试获取所有共享一个公共图库ID的文件列表,然后按upload_time对它们进行排序,但它无法正常工作.这是我使用的语法:
>>> foo = Storedfile.query.filter_by(
gallery_id ='kgLivY').all().order_by(Storedfile.upload_time)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'order_by'
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我试图解析一些RSS提要并使用URL将URL写入数据库flask-sqlalchemy.
其中一些Feed重叠(即同一篇文章出现在多个Feed中或多次出现在同一个Feed中),因此我将主键定义为URL的(非随机)哈希值.
我的问题是,当我循环遍历URL并将它们添加到Session时,我尝试将它们提交到数据库时遇到异常.
这是我的代码:
for entry in feed.entries:
# Create the database row
article = Article(entry)
# If the row already exists in the database
if db.session.query(Article).filter_by(uuid=article.uuid).first():
print "duplicate"
else:
db.session.merge(article)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
当文章已存在于数据库中时,将忽略该文章.但是,如果它存在于Session中但尚未提交数据库,那么SQLAlchemy会尝试在同一事务中多次写入它,我得到了sqlalchemy.exc.IntegrityError: (IntegrityError) column hash is not unique.
我的直觉是我需要检查会话中是否已存在具有该哈希的对象(以及查询数据库),我认为这是合并会做的,但我仍然得到错误.
我只是通过pip来获得sqlalchemy
pip install sqlalchemy
Run Code Online (Sandbox Code Playgroud)
当我在python控制台中从sqlalchemy导入一个简单的类时
from sqlalchemy import Column
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
from sqlalchemy import Column
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "sqlalchemy.py", line 5, in <module>
from sqlalchemy import Column, Integer, Unicode, UnicodeText, String
ImportError: cannot import name Column
Run Code Online (Sandbox Code Playgroud)
我在OSX和Ubuntu环境中有相同的错误.在SQLAlchemy网站支持部分,没有关于此问题的参考.它与我的Python环境有关吗?
我正在尝试使用SqlAlchemy在Flask中创建一对一的关系.我按照上一篇文章进行了操作,并创建了以下类:
class Image(db.Model):
__tablename__ = 'image'
image_id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(8))
class Blindmap(db.Model):
__tablename__ = 'blindmap'
module_id = db.Column(db.Integer, primary_key = True)
image_id = db.Column(db.Integer, ForeignKey('image.image_id'))
Run Code Online (Sandbox Code Playgroud)
虽然它可以将模型迁移到sqlite3数据库,但是当我尝试创建一个单独的对象通知另一个类的值为image_id时,我有一个错误.例如:
image1 = Image(image_id=1, name='image1.png')
blindmap1 = Blindmap(module_id=1, image_id=1)
Run Code Online (Sandbox Code Playgroud)
而我所遇到的错误就是随之而来的错误.我不太清楚这个完整性错误是什么.我还尝试在创建blindmap1时插入对象本身,但没有成功.
======================================================================
ERROR: test_commit_blindmap (__main__.TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests.py", line 183, in test_commit_blindmap
blindmap1.add_label(label1)
File "/home/thiago/Documents/ANU/MEDGg1/MEDG/LAWA/2014/trunk/app/models.py", line 325, in add_label
db.session.commit()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/scoping.py", line 150, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 776, …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的sqlite表.其中有3列.我想用SQLAlchemy计算user_id = 1的行数吗?
class UserImage(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
photo = db.Column(db.String(250))
Run Code Online (Sandbox Code Playgroud)
这将返回所有行.如何修改它以获得我的预期结果.rows = db.session.query(func.count(UserImage.user_id)).标量()
非常感谢你提前.
我想以JSON的形式返回查询结果.我正在使用以下路由将一个模型实例作为JSON对象返回.
@mod.route('/autocomplete/<term>', methods=['GET'])
def autocomplete(term):
country = Country.query.filter(Country.name_pt.ilike('%'+ term + '%')).first()
country_dict = country.__dict__
country_dict.pop('_sa_instance_state', None)
return jsonify(json_list=country_dict)
Run Code Online (Sandbox Code Playgroud)
如果我使用该first()方法,此代码很有效.但是,我需要使用它all()来获得所有结果.当我这样做时,我得到以下错误.
country_dict = country.__dict__
AttributeError: 'list' object has no attribute '__dict__'
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能将整个结果列表作为JSON返回?
我正在尝试使用flask + sqlalchemy在MSSQL中向我的表中插入一些数据.我正在使用Python 3.4.我的代码:
@main.route('/create-user', methods=['GET', 'POST'])
def create_user():
form = NewUser()
if form.validate_on_submit():
login = form.name.data
passwrd = form.password.data
print (login) #getting login is ok
print (passwrd) #same
engine.execute(
text("INSERT INTO my_table VALUES ((CONVERT(binary, :login)), (CONVERT(binary, :passwrd)))"), login, passwrd)
session.commit()
flash('Succesfull')
return redirect(url_for('main.index'))
return render_template('new_user.html', form=form)
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误:
AttributeError: 'tuple' object has no attribute 'keys'
Run Code Online (Sandbox Code Playgroud)
追溯:
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Python34\lib\site-packages\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File …Run Code Online (Sandbox Code Playgroud) 我在Flask和Flask-SQLAlchemy上遇到问题,对于任何查询,我都需要导入所有相关模型。
现在我的auth.views.py看起来像这样(对这件事进行编程的前几行只是一个测试视图)
from flask import jsonify
from . import auth
from app.models.user import User
@auth.route('/', methods=['GET'])
def index():
users = User.query.all()
return jsonify({'name': users[0].name})
Run Code Online (Sandbox Code Playgroud)
现在我遇到一个错误
“ InvalidRequestError:初始化映射器Mapper | User | user时,表达式'Course'未能找到名称(“ name'Course'未定义”。)如果这是一个类名,请考虑在该类之后添加该Relationship()两个相关的类都已定义。”
我有一个项目,其中有一个像这样的模型包
app
??? auth
? ??? __init__.py
? ??? views.py
??? __init__.py
??? models
??? assignment.py
??? base.py
??? client.py
??? course.py
??? __init__.py
??? submission.py
??? user.py
Run Code Online (Sandbox Code Playgroud)
我的用户类与课程之间有很多对比,与提交方面有一对多。
这可以通过导入“课程”(然后是“提交”,然后是从那里的关系,最终是所有模型)来解决。
在为Pyramid项目工作时,我们还使用SQLAlchemy,但我不必导入所有模型即可完成工作。有什么想法吗?我真的无法弄清楚,也无法用Google搜索。
用户看起来像这样
user_course = db.Table(
'user_course', db.Model.metadata,
db.Column('student_id', UUID, db.ForeignKey('user.id'),
primary_key=True),
db.Column('course_id', UUID, db.ForeignKey('course.id'),
primary_key=True)
)
class User(db.Model): …Run Code Online (Sandbox Code Playgroud) 所以我正在尝试使用python为sql炼金术调用构建多个过滤器.一世
query = MyModel.query
if 'column1' in data:
try:
value = int(data['column1'])
except (TypeError, ValueError):
pass
else:
query = query.filter(MyModel.column1 == value)
if 'column2' in data:
try:
value = datetime.utcfromtimestamp(int(data['column2']))
except (TypeError, ValueError):
pass
else:
query = query.filter(or_(MyModel.column2 >= value))
# etc.
return query
Run Code Online (Sandbox Code Playgroud)
我只是这样做,因为数据对象中的属性会有所不同,我不知道在数据对象中的过滤器方面会得到什么.现在,当我执行查询...语句AND将两个滤波器不管的or_我把第二个过滤器查询.为了使查询正常工作,我需要更改什么?