标签: sqlalchemy

SQLAlchemy DateTime时区

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)

python postgresql timezone datetime sqlalchemy

42
推荐指数
4
解决办法
4万
查看次数

SQLAlchemy ManyToMany具有附加字段的辅助表

我有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)

python orm many-to-many sqlalchemy flask-sqlalchemy

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

如何在MySQL中关闭sqlalchemy连接

这是我想要运行的示例代码:

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的连接.提前致谢!

mysql sqlalchemy

42
推荐指数
3
解决办法
4万
查看次数

Pylint找不到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)

python sqlalchemy pylint python-3.x flask-sqlalchemy

42
推荐指数
10
解决办法
3万
查看次数

Alembic:IntegrityError:添加非可空列时"列包含空值"

我正在向现有表添加列.这个新专栏是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)

python sqlalchemy alembic

42
推荐指数
3
解决办法
1万
查看次数

Sql Alchemy连接时间Out

我使用sqlalchemyMySQL,并执行与SQL表达式查询.执行一些查询时,它会超时.我找到了答案,但我不清楚.请问,任何人都可以帮助我吗?

TimeoutError:达到大小为5的QueuePool限制溢出10,连接超时,超时30

python session timeout sqlalchemy

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

使用sqlalchemy的复合键的关系

我有这个简单的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)

python sqlalchemy key database-relations composite

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

Flask-SQLAlchemy - 大于或等于

我在查询如何在查询中进行"大于或等于"比较时遇到了麻烦.

我有一个模型领域:

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 flask flask-sqlalchemy

41
推荐指数
1
解决办法
3万
查看次数

使用SQLAlchemy列出数据库表

我想实现一个函数,它提供有关数据库中存在的所有表(及其列名)的信息(不仅仅是使用SQLAlchemy创建的表).在阅读文档时,在我看来,这是通过反射完成的,但我没有设法使某些工作正常.有关如何执行此操作的任何建议或示例?

python database sqlalchemy

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

“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)

python sqlalchemy pylint flask python-3.x

41
推荐指数
6
解决办法
4万
查看次数