我是linux世界的新手,我想从Python查询Microsoft SQL Server.我在Windows上使用它,它非常好,但在Linux中它非常痛苦.
几个小时后,我终于成功使用unixODBC在Linux Mint上安装Microsoft ODBC驱动程序.
然后,我用python 3环境设置了一个anaconda.
然后我这样做:
import pyodbc as odbc
sql_PIM = odbc.connect("Driver={ODBC Driver 13 for SQL Server};Server=XXX;Database=YYY;Trusted_Connection=Yes")
Run Code Online (Sandbox Code Playgroud)
它返回:
('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found (0) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)
我没有遗忘的是,PyODBC似乎从odbcinst.ini读取了正确的文件路径,但仍然不起作用.
我去了"/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0",文件确实存在!
那为什么它告诉我它不存在?以下是一些可能的线索:
我不知道如何解决这些问题.
谢谢 !
情况
我有一个1300万行CSV,我想为每个组执行逻辑回归(incanter).我的文件是这样的(值只是样本)
ID Max Probability
1 1 0.5
1 5 0.6
1 10 0.99
2 1 0.1
2 7 0.95
Run Code Online (Sandbox Code Playgroud)
所以我首先用csv阅读器阅读它,永远很好.
我有类似的东西:
( {"Id" "1", "Max" 1, "Probability" 0.5} {"Id" "1", "Max" 5, "Probability" 0.6} etc.
Run Code Online (Sandbox Code Playgroud)
我希望通过Id分组这些值,如果我没记错的话,那里有大约1.2百万的ID.(我用Python做了大熊猫,速度非常快)
这是我读取和格式化文件的功能(它适用于较小的数据集):
(defn read-file
[]
(let [path (:path-file @config)
content-csv (take-csv path \,)]
(->> (group-by :Id content-csv)
(map (fn [[k v]]
[k {:x (mapv :Max v) :y (mapv :Probability v)}]))
(into {}))))
Run Code Online (Sandbox Code Playgroud)
我想最后有类似的东西来执行逻辑回归(我很灵活,不需要向量:x和:y,seqs都可以)
{"1" {:x [1 5 10] :y [0.5 0.6 0.99]} "2" {:x …Run Code Online (Sandbox Code Playgroud) 我目前正在编写具有未定义数量的arities的函数,所以我在clojure.core中寻找示例等等.
这是例如comp(clojure.core)的定义
(defn comp
"Takes a set of functions and returns a fn that is the composition
of those fns. The returned fn takes a variable number of args,
applies the rightmost of fns to the args, the next
fn (right-to-left) to the result, etc."
{:added "1.0"
:static true}
([] identity)
([f] f)
([f g]
(fn
([] (f (g)))
([x] (f (g x)))
([x y] (f (g x y)))
([x y z] (f (g x y z)))
([x …Run Code Online (Sandbox Code Playgroud) 我正在用基本示例探索宏,但我不明白它是如何工作的。
这个 :
(defmacro evalf [f v]
(f v))
(evalf + 2)
Run Code Online (Sandbox Code Playgroud)
不起作用。
我试过 :
(defmacro evalf [f v]
'(f v))
(evalf + 2)
Run Code Online (Sandbox Code Playgroud)
没运气...
我不明白其他语法:~ ~@ 等等,但它们也不起作用。我看到符号 f 没有指向 + 但我不知道说“取 f 的值是 +”。
你能说得更清楚吗?提前致谢
我的问题可能看起来很奇怪,但我认为我面临的是volatile对象问题.
我写了一个像这样实现的库(只是一个方案,而不是真正的内容):
(def var1 (volatile! nil))
(def var2 (volatile! nil))
(def do-things [a]
(vreset! var1 a)
(vswap! var2 (inc @var2))
{:a @var1 :b @var2})
Run Code Online (Sandbox Code Playgroud)
所以我有全局var,它由外部值初始化,其他的是计算的,我返回它们的内容.我使用volatile来获得比使用原子更快的速度,而不是每次为每次计算重新定义一个新的var.
问题是这在实践中似乎失败了,因为我map对一个集合(在另一个程序中)做了一些事情,偶尔会对这个函数进行内部子调用,比如(伪代码):
(map
(fn [x]
(let [analysis (do-things x)]
(if blabla
(do-things (f x))
analysis)))) coll)
Run Code Online (Sandbox Code Playgroud)
内部条件调用会在引擎盖下产生另一个线程吗?似乎是的,因为有些人称之为工作,有时则不然.除了在每个do-things身体内部定义挥发物之外还有其他方法吗?
编辑
实际上错误是另一回事,但问题仍然存在:这是一种可接受/安全的方式,没有任何显式调用多线程功能吗?