我正在尝试加入sqlalchemy中的同一个表.这是我尝试过的最小版本:
#!/usr/bin/env python
import sqlalchemy as sa
from sqlalchemy import create_engine
from sqlalchemy.orm import mapper, sessionmaker, aliased
engine = create_engine('sqlite:///:memory:', echo=True)
metadata = sa.MetaData()
device_table = sa.Table("device", metadata,
sa.Column("device_id", sa.Integer, primary_key=True),
sa.Column("name", sa.String(255), nullable=False),
sa.Column("parent_device_id", sa.Integer, sa.ForeignKey('device.device_id')),
)
class Device(object):
device_id = None
def __init__(self, name, parent_device_id=None):
self.name = name
self.parent_device_id = parent_device_id
def __repr__(self):
return "<Device(%s, '%s', %s)>" % (self.device_id,
self.name,
self.parent_device_id )
mapper(Device, device_table)
metadata.create_all(engine)
db_session = sessionmaker(bind=engine)()
parent = Device('parent')
db_session.add(parent)
db_session.commit()
child = Device('child', parent.device_id)
db_session.add(child) …Run Code Online (Sandbox Code Playgroud) 鉴于MATLAB uint32被解释为一个位串,什么是一种有效和简洁的方法来计算字符串中有多少非零位?
我有一个工作,天真的方法循环比特,但这对我的需求来说太慢了.(使用std :: bitset count()的C++实现几乎立即运行).
我找到了一个非常好的页面列出了各种位计数技术,但我希望有一种简单的MATLAB方式.
http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive
更新#1
刚刚实现了Brian Kernighan算法,如下所示:
w = 0;
while ( bits > 0 )
bits = bitand( bits, bits-1 );
w = w + 1;
end
Run Code Online (Sandbox Code Playgroud)
性能仍然很糟糕,超过10秒钟只计算4096 ^ 2重量计算.使用std :: bitset中的count()的我的C++代码在亚秒时间内执行此操作.
更新#2
这是我迄今为止尝试过的技术的运行时间表.我会在获得更多想法/建议时更新它.
矢量化Scheiner算法=> 2.243511秒 矢量化朴素bitget loop => 7.553345秒 Kernighan算法=> 17.154692秒 length(find(bitget(val,1:32)))=> 67.368278秒 nnz(bitget(val,1:32))=> 349.620259秒 Justin Scheiner的算法,展开循环=> 370.846031秒 Justin Scheiner的算法=> 398.786320秒 天真的比特环= = 456.016731秒 sum(dec2bin(val)=='1')=> 1069.851993秒
注释:MATLAB中的dec2bin()函数似乎执行得很差.它运行得非常慢.
注释:"Naive bitget loop"算法实现如下:
w=0;
for i=1:32
if bitget( val, i ) == 1
w = …Run Code Online (Sandbox Code Playgroud) 我通过xpath废弃了一些html,然后我转换成了etree.与此类似的东西:
<td> text1 <a> link </a> text2 </td>
Run Code Online (Sandbox Code Playgroud)
但是当我调用element.text时,我只得到text1(它必须在那里,当我在FireBug中检查我的查询时,元素的文本被突出显示,嵌入的锚元素之前和之后的文本......
请考虑以下压缩代码:
/* Compile: gcc -pthread -m32 -ansi x.c */
#include <stdio.h>
#include <inttypes.h>
#include <pthread.h>
static volatile uint64_t v = 0;
void *func (void *x) {
__sync_add_and_fetch (&v, 1);
return x;
}
int main (void) {
pthread_t t;
pthread_create (&t, NULL, func, NULL);
pthread_join (t, NULL);
printf ("v = %"PRIu64"\n", v);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有一个uint64_t我想以原子方式递增的变量,因为该变量是多线程程序中的计数器.为了实现原子性,我使用了GCC的原子内置.
如果我编译amd64系统(-m64),生成的汇编代码很容易理解.通过使用a lock addq,处理器保证增量是原子的.
400660: f0 48 83 05 d7 09 20 lock addq $0x1,0x2009d7(%rip)
Run Code Online (Sandbox Code Playgroud)
但是相同的C代码在ia32系统(-m32)上产生了非常复杂的ASM代码:
804855a: a1 28 a0 04 …Run Code Online (Sandbox Code Playgroud) 我只是尝试着我的手g++ 4.6和C++11功能.每次我使用-std=c++0xflag 编译一个简单的线程代码时,它都会因为分段错误而崩溃,或者只是抛出一些奇怪的异常.
我读了一些与C++11线程有关的问题,我意识到,我还需要使用-pthreadflag来正确编译代码.使用-pthread工作正常,我能够运行线程代码.
我的问题是,C++11多线程模型是否Pthreads在后台使用?还是从头开始写的?
我不知道是否有任何成员是gcc贡献者,但我只是好奇.
是否可以即时声明一个新类型(一个空的struct或没有实现的struct)?
例如
constexpr auto make_new_type() -> ???;
using A = decltype(make_new_type());
using B = decltype(make_new_type());
using C = decltype(make_new_type());
static_assert(!std::is_same<A, B>::value, "");
static_assert(!std::is_same<B, C>::value, "");
static_assert(!std::is_same<A, C>::value, "");
Run Code Online (Sandbox Code Playgroud)
一个“手动”解决方案是
template <class> struct Tag;
using A = Tag<struct TagA>;
using B = Tag<struct TagB>;
using C = Tag<struct TagC>;
Run Code Online (Sandbox Code Playgroud)
甚至
struct A;
struct B;
struct C;
Run Code Online (Sandbox Code Playgroud)
但是对于模板/ meta,一些魔术make_new_type()功能会很好。
有状态的元编程格式不正确,这样的事情是否可能呢?
c++ templates metaprogramming stateful compile-time-constant
考虑这个简单的表定义(使用SQLAlchemy-0.5.6)
from sqlalchemy import *
db = create_engine('sqlite:///tutorial.db')
db.echo = False # Try changing this to True and see what happens
metadata = MetaData(db)
user = Table('user', metadata,
Column('user_id', Integer, primary_key=True),
Column('name', String(40)),
Column('age', Integer),
Column('password', String),
)
from sqlalchemy.ext.declarative import declarative_base
class User(declarative_base()):
__tablename__ = 'user'
user_id = Column('user_id', Integer, primary_key=True)
name = Column('name', String(40))
Run Code Online (Sandbox Code Playgroud)
我想知道列名的最大长度是多少,例如来自用户表和用户(声明性类)
print user.name.length
print User.name.length
Run Code Online (Sandbox Code Playgroud)
我试过(User.name.type.length)但它抛出异常
Traceback (most recent call last):
File "del.py", line 25, in <module>
print User.name.type.length
File "/usr/lib/python2.5/site-packages/SQLAlchemy-0.5.6-py2.5.egg/sqlalchemy/orm/attributes.py", line 135, in …Run Code Online (Sandbox Code Playgroud) 我使用函数SSL_CTX_set_cipher_list来设置SSL连接支持的密码.传递给SSL_CTX_set_cipher_list以禁用弱密码的参数.
我试过传球 ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH
但它似乎没有用.
我的工具检测以下弱密码报告仍然启用
** SSLv3:DES-CBC-SHA - ENABLED - WEAK 56 bits ** ** TLSv1:DES-CBC-SHA - ENABLED - WEAK 56 bits ** ** SSLv2:RC4-MD5 - ENABLED - WEAK 128 bits ** ** SSLv2:RC2-CBC-MD5 - ENABLED - WEAK 128 bits ** ** SSLv2:RC4-64-MD5 - ENABLED - WEAK 64 bits ** ** SSLv2:DES-CBC-MD5 - ENABLED - WEAK 56 bits ** ** SSLv2:EXP-RC4-MD5 - ENABLED - WEAK 40 bits ** ** SSLv2:EXP-RC2-CBC-MD5 - ENABLED - WEAK 40 bits ** ** SSLv2:DES-CBC3-MD5 - …
我有一个模型,其日期列定义为:
created_on = db.Column(db.DateTime, default=db.func.now(), nullable=False)
Run Code Online (Sandbox Code Playgroud)
日期与tz_info = None,这是正确的,因为日期存储没有时区信息.
如果我打印日期:
print(my_object.created_on.isoformat())
Run Code Online (Sandbox Code Playgroud)
我得到这种格式
2014-04-26T17:46:27.353936
Run Code Online (Sandbox Code Playgroud)
我想要一个UTC时区指标,例如:
2014-04-26T17:46:27.353936Z
Run Code Online (Sandbox Code Playgroud)
有没有办法在架构配置中定义此行为?
SQLAlchemy有,timezone = Boolean
sqlalchemy.types.DateTime(时区=假)
因为我希望存储没有时区.
我想在现有的映射类中添加一个字段,如何自动更新sql表.如果将字段添加到类中,sqlalchemy是否提供了使用新列更新数据库的方法.