小编ali*_*lif的帖子

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万
查看次数

重定向命令以在Python中输入另一个

我想在python中复制它:

gvimdiff <(hg cat file.txt) file.txt
Run Code Online (Sandbox Code Playgroud)

(hg cat file.txt输出最近提交的file.txt版本)

我知道如何将文件传递给gvimdiff,但它不会接受另一个文件:

$ hg cat file.txt | gvimdiff file.txt -
Too many edit arguments: "-"
Run Code Online (Sandbox Code Playgroud)

进入python部分......

# hgdiff.py
import subprocess
import sys
file = sys.argv[1]
subprocess.call(["gvimdiff", "<(hg cat %s)" % file, file])
Run Code Online (Sandbox Code Playgroud)

当子过程被称为它仅仅传递<(hg cat file)gvimdiff作为文件名.

那么,有没有办法像bash那样重定向命令?为简单起见,只需捕获一个文件并将其重定向到diff:

diff <(cat file.txt) file.txt
Run Code Online (Sandbox Code Playgroud)

python bash diff redirect vimdiff

7
推荐指数
1
解决办法
4599
查看次数

标签 统计

python ×2

bash ×1

datetime ×1

diff ×1

postgresql ×1

redirect ×1

sqlalchemy ×1

timezone ×1

vimdiff ×1