SQLAlchemy正在为postgresql中的列生成(但不启用)序列.我怀疑我可能在引擎设置方面做错了.
使用SQLAlchemy教程中的示例(http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html):
#!/usr/bin/env python
from sqlalchemy import create_engine, Column, Integer, String, Sequence
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
name = Column(String(50))
fullname = Column(String(50))
password = Column(String(12))
def __repr__(self):
return "<User(name='%s', fullname='%s', password='%s')>" % (
self.name, self.fullname, self.password)
db_url = 'postgresql://localhost/serial'
engine = create_engine(db_url, echo=True)
Base.metadata.create_all(engine)
Run Code Online (Sandbox Code Playgroud)
使用此脚本,将生成以下表:
serial=# \d+ users
Table "public.users"
Column | Type | Modifiers | Storage | Stats target | Description
----------+-----------------------+-----------+----------+--------------+-------------
id | …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,该mc分配在Python 2和3中正常工作.
cc在类中使用相同列表推导的赋值在Python 2中有效,但在Python 3中失败.
什么解释了这种行为?
ml1 = "a b c".split()
ml2 = "1 2 3".split()
mc = [ i1 + i2 for i1 in ml1 for i2 in ml2 ]
class Foo(object):
cl1 = ml1
cl2 = ml2
cc1 = [ i1 for i1 in cl1 ]
cc2 = [ i2 for i2 in cl2 ]
cc = [ i1 + i2 for i1 in cl1 for i2 in cl2 ]
print("mc = ", mc)
foo …Run Code Online (Sandbox Code Playgroud) 我正在寻找允许用户覆盖应用程序中的模块或使用新模块扩展应用程序的技术.
想象一下名为pydraw的应用程序.它目前提供了一个Circle类,它继承了Shape.包树可能如下所示:
/usr/lib/python/
??? pydraw
??? __init__.py
??? shape.py
??? shapes
??? circle.py
??? __init__.py
Run Code Online (Sandbox Code Playgroud)
现在假设我想启用动态发现和加载实现新形状的用户模块,或者甚至是Shape类本身.对于用户的树来说,与应用程序树具有相同的结构似乎是最直接的,例如:
/home/someuser/python/
??? pydraw
??? __init__.py
??? shape.py <-- new superclass
??? shapes
??? __init__.py
??? square.py <-- new user class
Run Code Online (Sandbox Code Playgroud)
换句话说,我想用来自用户树的同名文件覆盖和屏蔽应用程序树,或者至少从Python的角度来看这个明显的结构.
然后,通过配置sys.path或PYTHONPATH,pydraw.shapes.square可能是可发现的.但是,Python的模块路径搜索找不到像square.py这样的模块.我认为这是因为__method__已经在另一个路径中包含父模块.
你会如何用Python完成这项任务?
GNU getopt和使用它的命令行工具允许交叉选项和参数,称为置换选项(参见http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using -Getopt).Perl的Getopt :: Long模块也支持这个(使用qw(:config gnu_getopt)).argparse似乎不支持(甚至提及)置换选项.
有许多与arg/opt命令相关的SO问题,但似乎没有人回答这个问题:argparse可以像getopt那样置换参数顺序吗?
用例是一个典型的命令行签名,如GNU sort:
sort [opts] [files]
Run Code Online (Sandbox Code Playgroud)
其中1)选项和文件被置换,以及2)文件列表可以包含零个或多个参数.
例如:
import argparse
p = argparse.ArgumentParser();
p.add_argument('files',nargs='*',default=['-']);
p.add_argument('-z',action='store_true')
p.parse_args(['-z','bar','foo']) # ok
p.parse_args(['bar','foo','-z']) # ok
p.parse_args(['bar','-z','foo']) # not okay
usage: ipython [-h] [-z] [files [files ...]]
Run Code Online (Sandbox Code Playgroud)
我试过了:
我想实现一些接近上面GNU排序原型的东西.我对可以为每个文件指定的标志不感兴趣(例如,-f file1 -f file2).
环境:Ubuntu 11.10,MySQL 5.1.58
我有一个包含视图的小型数据库.当我尝试转储和恢复时,我明白了
ERROR 1356 (HY000) at line 1693: View 'curation2.condition_reference_qrm_v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
Run Code Online (Sandbox Code Playgroud)
但是,我可以连接到部分还原的数据库并自己创建视图.因此,我怀疑错误消息是由与视图本身无关的问题引起的(而不是它是如何恢复的).
这是我用来演示问题的简单方法:
MYSQL_PWD='xxx' mysqldump -u root --routines -B curation \
| perl -pe 's/`curation`/`curation2`/' \
| MYSQL_PWD='xxx' mysql -u root
Run Code Online (Sandbox Code Playgroud)
还有许多其他类似问题的在线报告.mysqldump手册页有一个关于备份视图的错误的神秘笔记,但它是作为历史问题而不是当前问题编写的.
所以,问题是:MySQL能否可靠地恢复包含视图的备份?如果可以,怎么样?如果没有,人们做什么作为解决方法?
谢谢,Reece
我经常需要在iPython中查看长文本变量.我通常使用滚动缓冲区,但我真的想要一个搜索的寻呼机.iPython是否有办法在寻呼机中查看长变量(例如,更少)?如果没有,我当然可以设法做到这一点!
注意:我一般不会问如何设置PAGER.?,??,%pdoc等都可以正常工作.我专门询问分页变量.
我有一个python脚本,它接受stdin的输入.我想放入IPython.embed(),像这样:
for filepath in sys.stdin:
dir = os.path.basename(filepath)
...
IPython.embed()
Run Code Online (Sandbox Code Playgroud)
然后我调用这样的脚本:
find . -type f | thescript.py
Run Code Online (Sandbox Code Playgroud)
问题是IPython使用stdin作为交互式控制台,所以它看到的第一件事就是剩下的管道数据.然后,管道关闭,终端退出.
有没有办法调试使用stdin和ipython的脚本?
我想将SqlSoup与包含视图的现有数据库一起使用.访问一个表是游泳,但访问一个视图会导致"PKNotFoundError:table'[viewname]'没有定义主键..."
我是否正确推断SqlSoup不适用于数据库视图(默认情况下,至少)?我一直无法在Google,SO或SqlAlchemy邮件列表中找到任何直接相关的内容.如果您遇到此问题,如果您想访问不可更新的视图,您将如何继续?我是SQLAlchemy和SQLSoup的新手.
这是一个具体的例子:
from sqlalchemy.ext.sqlsoup import SqlSoup
u = SqlSoup('postgresql+psycopg2://PUBLIC@unison-db.org:5432/unison')
seq = u.pseq.filter(u.pseq.pseq_id==76).all() # okay
aliases = u.pseqalias.filter(u.pseqalias.pseq_id==76).all()
Run Code Online (Sandbox Code Playgroud)
这是一个公共数据库.您可以使用psql运行等效查询:
psql -h unison-db.org -U PUBLIC -d unison -c 'select * from pseq where pseq_id=76'
psql -h unison-db.org -U PUBLIC -d unison -c 'select * from pseqalias where pseq_id=76'
Run Code Online (Sandbox Code Playgroud) 是否可以创建protobuf标量类型的别名?
例如,即使它们是等效的二进制代码,我也想用Sequence代替string。
我的近期目标是使文档(使用protoc-gen-doc生成)更容易理解。
理想情况下,可以使用支持类型检查的语言来表示此类型,但这不是必需的。
documentation protocols documentation-generation protocol-buffers
我将travis设置为使用tox(Python 2.7和3.5)进行测试并部署到pypi.
Travis尝试为每次测试运行部署包,pypi正确拒绝第二次尝试.
我希望只有当tox成功完成两次运行时,travis才会部署一次.这是如何完成的?
Travis配置:https://github.com/biocommons/biocommons.seqrepo/blob/master/.travis.yml
并且测试运行:https://travis-ci.org/biocommons/biocommons.seqrepo/builds/157794212 (68.2首先完成并推送到pypi .pypi错误在68.1.)
相关但陈旧的问题:为什么Travis在部署之前不等待所有构建都通过?
我想在Scala中创建一组字符范围,例如A..Za..z0..9.这是我的看法:
scala> ('A' to 'Z').toSet.union(('a' to 'z').toSet).union(('0' to '9').toSet)
res3: scala.collection.immutable.Set[Char] = Set(E, e, X, s, x, 8, 4, n, 9, N, j, y, T, Y, t, J, u, U, f, F, A, a, 5, m, M, I, i, v, G, 6, 1, V, q, Q, L, b, g, B, l, P, p, 0, 2, C, H, c, W, h, 7, r, K, w, R, 3, k, O, D, Z, o, z, S, d)
Run Code Online (Sandbox Code Playgroud)
这不是习惯性的方式.什么是更好的方式?
我有一个字节的子类,提供了一个__getitem__dunder方法.该__getitem__方法始终在Python 3.5中调用,但仅在Python 2.7中调用非切片键.(相反,似乎父项__getitem__已应用于实例.)为什么这样,是否有解决方法?
class A(object):
def __getitem__(self, key):
print("in A.__getitem__ with key " + str(key))
return []
class B(bytes):
def __getitem__(self, key):
print("in B.__getitem__ with key " + str(key))
return []
if __name__ == "__main__":
import sys
print(sys.version)
a = A()
b = B()
print("[0]")
a[0]
b[0]
print("[0:1]")
a[0:1]
b[0:1]
print("[:1]")
a[:1]
b[:1]
Run Code Online (Sandbox Code Playgroud)
__getitem__始终调用类定义.
(venv) snafu$ python ./x.py
3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609]
[0]
in A.__getitem__ …Run Code Online (Sandbox Code Playgroud) 如何显示 pytest 执行的每个测试所花费的时间?
我调查了 pytest-timeout、pytest-timeit 和 pytest-benchmark。pytest-benchmark 最接近,但需要手动包装每个测试。
最迫切的需要是弄清楚为什么在 Py 3.x 下进行测试所需的时间几乎是 Py 2.7 的两倍。我要测试的包中有 231 个顶级测试(由 pytest 确定),因此包装所有这些并非易事。
python ×9
python-3.x ×3
ipython ×2
postgresql ×2
python-2.7 ×2
python-3.5 ×2
sql ×2
sqlalchemy ×2
argparse ×1
command-line ×1
getopt ×1
mysql ×1
mysqldump ×1
oop ×1
protocols ×1
pytest ×1
scala ×1
testing ×1
travis-ci ×1