试图在Windows上设置Flask和SQLAlchemy,但我遇到了问题.
我一直在使用Flask-SQLAlchemy以及PostgreSQL 9.1.4(32位)和Psycopg2包.以下是代码的相关部分,我创建了一个基本的用户模型,以测试我的数据库是否正在连接,并提交.
三位代码将来__init__.py自我的应用程序models.py文件,文件和我的settings.py文件.
当我尝试打开我的交互式提示并尝试以下链接中的代码时,我得到一个ProgrammingError异常(链接中的详细信息).
可能是什么导致了这个?我按照文档进行了操作,我很困惑我做错了什么,特别是考虑到我在Windows上也使用了带有psycopg2和PostgreSQL的Django.
我没有看到第三个论点.当我运行此命令时:
used_emails = [row.email for row
in db.execute(halo4.select([halo4.c.email],[halo4.c.email!='']))]
Run Code Online (Sandbox Code Playgroud)
它说:
TypeError:select()最多需要2个参数(给定3个)
第三个论点在哪里?
如何InstrumentedAttribute在SQLalchemy中获取对象的值:
(Pdb) ResultLine.item_reference_1
<sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x793dc90>
Run Code Online (Sandbox Code Playgroud)
上面的语句向我显示sqlalchemy对象。
我真正需要的是与之相关的价值。
我可以在SQLAlchemy中实现以下内容,
SELECT * FROM TABLE where right(COULUMN_CODE,2) = 'AX'
Run Code Online (Sandbox Code Playgroud)
here RIGHT( )- 返回具有指定字符数的字符串的右侧部分
是否有RIGHT函数的SQLAlchemy实现?
我有以下型号和表格:
chat_members = db.Table('chat_members',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('chat_id', db.Integer, db.ForeignKey('chat.id'))
)
class chat(db.Model):
id = db.Column(db.Integer, primary_key=True)
start_date = db.Column(db.DateTime)
chat_memb = db.relationship('user', secondary=chat_members, backref=db.backref('members', lazy='dynamic'))
chat_line = db.relationship('line', backref='chat_line', lazy='dynamic')
def __repr__(self):
return '<Chat %r>' % (self.id)
class user(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_email = db.Column(db.String, unique=True)
user_password = db.Column(db.String)
lines = db.relationship('line', backref='line_author', lazy='dynamic')
def __repr__(self):
return '<User %r>' % (self.user_email)
class line(db.Model):
id = db.Column(db.Integer, primary_key=True)
published_date = db.Column(db.DateTime)
chat_id = db.Column(db.Integer, db.ForeignKey('chat.id'))
sent_by = db.Column(db.Integer, db.ForeignKey('user.id')) …Run Code Online (Sandbox Code Playgroud) 如何在sqlalchemy查询中使用函数验证密码?在
class PersonModel(Base):
__tablename__ = 'persons'
username = Column(String(30), nullable=False)
email = Column(String(75), nullable=False)
password = Column(String(128), nullable=False)
Run Code Online (Sandbox Code Playgroud)
我使用存储的密码sha256_crypt.encrypt("password_string")从http://pythonhosted.org/passlib /我可以验证sha256_crypt.verify(password_to_check_against, hash)
(试过像
person = session.query(PersonModel).filter(and_(PersonModel.username.like(username), PersonModel.password.like(sha256_crypt.encrypt(password_string)))).first()
Run Code Online (Sandbox Code Playgroud)
但它不起作用=> sha256_crypt.encrypt(password_string)生成不同于db的相同密码的值,我不能==只使用sha256_crypt.verify来自网站的运算符)如何在我的查询中注入这个?
我是Python和Pyramid的新手.在我用来了解更多有关Pyramid的测试应用程序中,我想查询数据库并根据sqlalchemy查询对象的结果创建字典,最后将字典发送到变色龙模板.
到目前为止,我有以下代码(工作正常),但我想知道是否有更好的方法来创建我的字典.
...
index = 0
clients = {}
q = self.request.params['q']
for client in DBSession.query(Client).filter(Client.name.like('%%%s%%' % q)).all():
clients[index] = { "id": client.id, "name": client.name }
index += 1
output = { "clients": clients }
return output
Run Code Online (Sandbox Code Playgroud)
在学习Python时,我发现了一种在for循环语句中创建列表的好方法,如下所示:
myvar = [user.name for user in users]
Run Code Online (Sandbox Code Playgroud)
那么,我遇到的另一个问题是:是否有像上面这样的"一行"方式来创建sqlalchemy查询对象的字典?
提前致谢.
I am creating a Point of Sales application, with the typical data hierarchy : Company->branches->Sales->SaleData, this is the model definition (Note that, the User model already prepare and working as a flask-login compatible model) :
from flask_sqlalchemy import SQLAlchemy
from main import db
from collections import OrderedDict
class Users(db.Model,object):
'''
Adding object to trun sqlalchemy into json object
'''
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(60), unique=True)
firstname = db.Column(db.String(20))
lastname = db.Column(db.String(20))
password = db.Column(db.String)
email = db.Column(db.String(100), unique=True) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Flask-SqlAlchemy连接到MySQL数据库,这是我的参数:
SQLALCHEMY_DATABASE_URI = 'mysql://root:pass@127.0.0.1/database?charset=utf8'
Run Code Online (Sandbox Code Playgroud)
但是当我转到网址时,我收到此错误:
AttributeError:'tuple'对象没有属性'drivername'
如果我更改SQLALCHEMY_DATABASE_URI为sqlite:///db.sqlite,它可以正常工作.
我错过了什么?
注意:我也试过mysql+mysqldb://,没有任何运气.
在python类中,SQLAlchemy您必须为字符串变量指定最大字符长度。例如,url = Column(String(200))我有兴趣存储一个大字符串,但是当我尝试设置时mytextfield = Column(String(2**30)),出现以下错误:
OperationalError: (OperationalError) (1074, "Column length too big for column 'textfield' (max = 21845); use BLOB or TEXT instead") '\nCREATE TABLE users (\n\tid INTEGER NOT NULL AUTO_INCREMENT, \n\tname VARCHAR(50), \n\tfullname VARCHAR(50), \n\tpassword VARCHAR(12), \n\ttextfield VARCHAR(2147483648), \n\tPRIMARY KEY (id)\n)\n\n' ()
如何保持ascii编码但增加SQLAlchemy对象Base类中字符串的最大长度?如果我要切换为使用unicode,mytextfield = Column(UnicodeText(2**30))我是否认为这将默认为utf-8,并且不会增加标准英文字符的存储大小?如果它是在utf-8中,并且我从SQL数据库中检索了一个条目,text = u'my text here'即使最初输入的内容是文本,该文本也将等效于text = 'my text here'?
这是我当前的代码:
from sqlalchemy import create_engine
engine = create_engine("mysql://user:password@host/database")
from sqlalchemy.ext.declarative import declarative_base
Base = …Run Code Online (Sandbox Code Playgroud) python ×10
sqlalchemy ×10
flask ×4
mysql ×2
ascii ×1
flask-login ×1
pyramid ×1
python-2.7 ×1
unicode ×1