我正在使用sqlalchemy 6.0.SQL Server T-SQL方言似乎想要将属于我主键的任何整数转换为标识.如果整数字段是主键,那可能没问题,但我的是一个复合词,这对我不起作用.有没有办法抑制这种行为?
这是一个问题的演示:
from sqlalchemy import *
from sqlalchemy.schema import CreateTable
from sqlalchemy.types import CHAR
import sqlalchemy.dialects.mssql.pyodbc
metadata = MetaData()
t = Table('TEST', metadata,
Column(u'int_part', Integer, primary_key=True, nullable=False),
Column(u'char_part', CHAR(length=20), primary_key=True, nullable=False),
)
create = CreateTable(t)
print "Generic dialect gets it right"
print create.compile()
print
print "MSSql dialect gets it wrong"
print create.compile(dialect=sqlalchemy.dialects.mssql.pyodbc.dialect())
Run Code Online (Sandbox Code Playgroud)
结果:
Generic dialect gets it right
CREATE TABLE "TEST" (
int_part INTEGER NOT NULL,
char_part CHAR(20) NOT NULL,
PRIMARY KEY (int_part, char_part)
)
SQL Server …Run Code Online (Sandbox Code Playgroud) 我有一个包含一些XSD生成的类的DLL.不幸的是,XSD.exe使这些类公开,导致"公开可见类型或成员XYZ缺少XML注释"警告.另外,我宁愿不从我的DLL中暴露这些类.有没有办法,没有手动编辑生成的.cs,使这些类内部?
我正在尝试创建一个简单的池对象,我希望或多或少公平地将对一组共享资源的访问权限分配给任何要求它的线程.在Windows中,我通常会有一个Mutexes数组并执行WaitForMultipleObjects,bWaitAll = FALSE(参见下面的windows_pool_of_n_t).但我希望有一天能够将其移植到其他操作系统,所以我想坚持使用标准.一个资源的deque,大小()!= 0的condition_variable似乎是一个明显的解决方案(参见下面的pool_of_n_t).
但由于我不明白的原因,该代码序列化了线程访问.我并不期望严格公平,但这几乎是最糟糕的情况 - 上次锁定的线程总是在下次获得锁定.这并不是说std :: mutex不符合Windows或多或少的公平调度,因为只使用没有条件变量的互斥锁可以按预期工作,当然只有一个池,当然(参见下面的pool_of_one_t).
有谁能解释一下?有没有解决的办法?
结果:
C:\temp\stdpool>bin\stdpool.exe
pool:pool_of_one_t
thread 0:19826 ms
thread 1:19846 ms
thread 2:19866 ms
thread 3:19886 ms
thread 4:19906 ms
thread 5:19926 ms
thread 6:19946 ms
thread 7:19965 ms
thread 8:19985 ms
thread 9:20004 ms
pool:windows_pool_of_n_t(1)
thread 0:19819 ms
thread 1:19838 ms
thread 2:19858 ms
thread 3:19878 ms
thread 4:19898 ms
thread 5:19918 ms
thread 6:19938 ms
thread 7:19958 ms
thread 8:19978 ms
thread 9:19997 ms
pool:pool_of_n_t(1)
thread 9:3637 ms
thread 0:4538 …Run Code Online (Sandbox Code Playgroud) 我想我一定是误解了 Zones 在 java 的 ZonedDateTime 类中是如何工作的。当我使用 Jackson 序列化然后反序列化 now() 时,反序列化的值具有 getZone() == "UTC" 而不是序列化值中的 "Z"。谁能向我解释为什么会这样以及我应该做什么?
下面的代码打印:
{"t":"2017-11-24T18:00:08.425Z"}
Data [t=2017-11-24T18:00:08.425Z]
Data [t=2017-11-24T18:00:08.425Z[UTC]]
Z
UTC
Run Code Online (Sandbox Code Playgroud)
java源码:
<!-- language: java -->
package model;
import static org.junit.Assert.*;
import java.io.IOException;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import org.junit.Test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class ZonedDateTimeSerializationTest {
static public class Data {
@Override
public String toString() {
return "Data [t=" + t + "]";
}
public ZonedDateTime getT() {
return t;
}
public void setT(ZonedDateTime …Run Code Online (Sandbox Code Playgroud) 我有鲁斯特以下海明重码,和它返回的垃圾0xffff和0xffffffff,但在C相同的代码工作,所以我一定是误解的东西担心生锈怎么做位级操作.它完全是括号,所以我认为这不是运算符优先问题.
在C:
#include <stdio.h>
int hamming_weight(int val) {
int v1 = val - ((val >> 1) & 0x55555555);
int v2 = (v1 & 0x33333333) + ((v1 >> 2) & 0x33333333);
return (((v2 + (v2 >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24;
}
int main() {
printf("%x -> %d\n", 7, hamming_weight(7));
printf("%x -> %d\n", 0xff, hamming_weight(0xff));
printf("%x -> %d\n", 0xffff, hamming_weight(0xffff));
printf("%x -> %d\n", 0xffffffff, hamming_weight(0xffffffff));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
7 -> 3
ff -> 8 …Run Code Online (Sandbox Code Playgroud) 当我尝试使用 sqlite3 查询通过 JDBC 插入的日期时,我看到了意外的结果。这个java代码:
try (Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db")) {
conn.setAutoCommit(true);
try (Statement statement = conn.createStatement()) {
statement.executeUpdate("create table dates (date DATETIME);");
}
try (PreparedStatement insert = conn
.prepareStatement("insert into dates values (?)")) {
insert.setTimestamp(1, Timestamp.valueOf(LocalDateTime.now()));
insert.executeUpdate();
}
}
Run Code Online (Sandbox Code Playgroud)
似乎没有插入正确的日期时间 - 当我通过 sqlite3 查询它时,我无法获得人类可读的值:
sqlite3 test.db "select date, datetime(date, 'unixepoch') from dates;"
1507819362296|
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为 sqlite 文档说有效的 unix 纪元范围是“-62167219200 到 106751991167”(https://sqlite.org/lang_datefunc.html)。
我应该如何通过 JDBC 和 Sqlite 使用日期?