SQLAlchemy的DateTime类型允许timezone=True参数将非天真的日期时间对象保存到数据库,并返回它.有没有办法修改tzinfoSQLAlchemy传入的时区,所以它可能是,例如,UTC?我意识到我可以使用default=datetime.datetime.utcnow; 然而,这是一个天真的时间,很乐意接受有人在一个天真的基于timezone=True本地时间的日期时间,即使我使用它,因为它使本地或UTC时间不天真没有基准时区来规范化它.我已经尝试过(使用pytz)使日期时间对象不天真,但是当我将它保存到数据库时,它又回归天真.
注意datetime.datetime.utcnow如何不能timezone=True很好地工作:
import sqlalchemy as sa
from sqlalchemy.sql import select
import datetime
metadata = sa.MetaData('postgres://user:pass@machine/db')
data_table = sa.Table('data', metadata,
sa.Column('id', sa.types.Integer, primary_key=True),
sa.Column('date', sa.types.DateTime(timezone=True), default=datetime.datetime.utcnow)
)
metadata.create_all()
engine = metadata.bind
conn = engine.connect()
result = conn.execute(data_table.insert().values(id=1))
s = select([data_table])
result = conn.execute(s)
row = result.fetchone()
Run Code Online (Sandbox Code Playgroud)
(1,datetime.datetime(2009,1,6,0,9,36,891887))
row[1].utcoffset()
Run Code Online (Sandbox Code Playgroud)
datetime.timedelta(-1,64800)#这是我的本地时间偏移!!
datetime.datetime.now(tz=pytz.timezone("US/Central"))
Run Code Online (Sandbox Code Playgroud)
datetime.timedelta(-1,64800)
datetime.datetime.now(tz=pytz.timezone("UTC"))
Run Code Online (Sandbox Code Playgroud)
datetime.timedelta(0)#UTC
即使我将其更改为显式使用UTC:
...
data_table = sa.Table('data', metadata,
sa.Column('id', sa.types.Integer, primary_key=True),
sa.Column('date', sa.types.DateTime(timezone=True), default=datetime.datetime.now(tz=pytz.timezone('UTC')))
) …Run Code Online (Sandbox Code Playgroud) 我有3个表:User,Community,community_members(用于关系many2many的用户和社区).
我使用Flask-SQLAlchemy创建这个表:
community_members = db.Table('community_members',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('community_id', db.Integer, db.ForeignKey('community.id')),
)
class Community(db.Model):
__tablename__ = 'community'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False, unique=True)
members = db.relationship(User, secondary=community_members,
backref=db.backref('community_members', lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)
现在我想向community_members添加其他字段,如下所示:
community_members = db.Table('community_members',
db.Column('id', db.Integer, primary_key=True),
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('community_id', db.Integer, db.ForeignKey('community.id')),
db.Column('time_create', db.DateTime, nullable=False, default=func.now()),
)
Run Code Online (Sandbox Code Playgroud)
现在在python shell中我可以这样做:
创建社区:
> c = Community()
> c.name = 'c1'
> db.session.add(c)
> db.session.commit()
Run Code Online (Sandbox Code Playgroud)
将成员添加到社区:
> u1 = User.query.get(1)
> u2 = User.query.get(2)
> c.members.append(u1)
> c.members.append(u2)
> db.session.commit() …Run Code Online (Sandbox Code Playgroud) 这是我想要运行的示例代码:
for i in range(1,2000):
db = create_engine('mysql://root@localhost/test_database')
conn = db.connect()
#some simple data operations
conn.close()
db.dispose()
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以运行它而不会从MySQL获得"Too many connections"错误?我已经知道我可以处理连接,或者有连接池.我只想了解如何正确关闭sqlalchemy的连接.提前致谢!
我有一个使用Flask-SQLAlchemy(v2.0)的Flask(v0.10.1)应用程序,我正在尝试配置Pylint来检查它.使用Python 3.4.2运行.
第一个错误是:
Instance of 'SQLAlchemy' has no 'Table' member (no-member)
Run Code Online (Sandbox Code Playgroud)
我修复了这个,忽略了SQLAlchemy上的成员属性检查:
ignored-classes=SQLAlchemy
Run Code Online (Sandbox Code Playgroud)
但是我对实体上的查询成员有问题:
Class 'UserToken' has no 'query' member (no-member)
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,而不必忽略每个查询调用上的无成员错误?
烧瓶引导:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
app = Flask(__name__)
db.init_app(app)
app.run()
Run Code Online (Sandbox Code Playgroud)
UserToken实体:
from app import db
class UserToken(db.Model):
user_token_id = db.Column(db.Integer, primary_key=True, index=True)
token_auth = db.Column(db.String(64), unique=True, nullable=False, index=True)
Run Code Online (Sandbox Code Playgroud)
控制器:
from entities import UserToken
token = UserToken.query.filter(
UserToken.token_auth == token_hash,
).first()
Run Code Online (Sandbox Code Playgroud) 我正在向现有表添加列.这个新专栏是nullable=False.
op.add_column('mytable', sa.Column('mycolumn', sa.String(), nullable=False))
Run Code Online (Sandbox Code Playgroud)
当我运行迁移时,它会抱怨:
sqlalchemy.exc.IntegrityError: column "mycolumn" contains null values
Run Code Online (Sandbox Code Playgroud) 我使用sqlalchemy带MySQL,并执行与SQL表达式查询.执行一些查询时,它会超时.我找到了答案,但我不清楚.请问,任何人都可以帮助我吗?
TimeoutError:达到大小为5的QueuePool限制溢出10,连接超时,超时30
我有这个简单的Author - Books模型,无法找到使firstName和lastName成为复合键的方法,并将其用于关系中.有任何想法吗?
from sqlalchemy import create_engine, ForeignKey, Column, String, Integer
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('mssql://user:pass@library')
engine.echo = True
session = sessionmaker(engine)()
class Author(Base):
__tablename__ = 'authors'
firstName = Column(String(20), primary_key=True)
lastName = Column(String(20), primary_key=True)
books = relationship('Book', backref='author')
class Book(Base):
__tablename__ = 'books'
title = Column(String(20), primary_key=True)
author_firstName = Column(String(20), ForeignKey('authors.firstName'))
author_lastName = Column(String(20), ForeignKey('authors.lastName'))
Run Code Online (Sandbox Code Playgroud) 我在查询如何在查询中进行"大于或等于"比较时遇到了麻烦.
我有一个模型领域:
invoicedate = db.Column(db.Date(), nullable=True, key='InvoiceDate')
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行以下过滤器:
Invoice.query.filter_by(invoicedate >= date.today()).count()
Run Code Online (Sandbox Code Playgroud)
当我运行视图时,它不断抛出以下错误:
NameError: global name 'invoicedate' is not defined
Run Code Online (Sandbox Code Playgroud)
sqlalchemy或flask-sqlalchemy中大于或等于过滤器的正确语法是什么?
非常感谢 :)
我想实现一个函数,它提供有关数据库中存在的所有表(及其列名)的信息(不仅仅是使用SQLAlchemy创建的表).在阅读文档时,在我看来,这是通过反射完成的,但我没有设法使某些工作正常.有关如何执行此操作的任何建议或示例?
我目前正在尝试实现 Steam 登录网站。但是我无法在代码中传递这个错误。我已经创建了数据库对象,但它一直显示我之前提到的错误。我不确定 SQLAlchemy 是否发生了变化,或者自从我使用它以来发生了什么变化。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
Run Code Online (Sandbox Code Playgroud)
发出的消息pylint是
E1101: Instance of 'SQLAlchemy' has no 'Column' member (no-member)
Run Code Online (Sandbox Code Playgroud) sqlalchemy ×10
python ×8
flask ×2
pylint ×2
python-3.x ×2
alembic ×1
composite ×1
database ×1
datetime ×1
key ×1
many-to-many ×1
mysql ×1
orm ×1
postgresql ×1
session ×1
timeout ×1
timezone ×1