Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
a7eaa8ad
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a7eaa8ad
编写于
1月 14, 2020
作者:
weixin_48148422
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tbase-1470: python2&3, windows
上级
f12c270e
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
668 addition
and
457 deletion
+668
-457
src/connector/python/windows/python2/taos/cinterface.py
src/connector/python/windows/python2/taos/cinterface.py
+59
-6
src/connector/python/windows/python2/taos/connection.py
src/connector/python/windows/python2/taos/connection.py
+11
-2
src/connector/python/windows/python2/taos/subscription.py
src/connector/python/windows/python2/taos/subscription.py
+52
-0
src/connector/python/windows/python3/taos/cinterface.py
src/connector/python/windows/python3/taos/cinterface.py
+406
-369
src/connector/python/windows/python3/taos/connection.py
src/connector/python/windows/python3/taos/connection.py
+88
-80
src/connector/python/windows/python3/taos/subscription.py
src/connector/python/windows/python3/taos/subscription.py
+52
-0
未找到文件。
src/connector/python/windows/python2/taos/cinterface.py
浏览文件 @
a7eaa8ad
...
...
@@ -13,14 +13,14 @@ def _convert_microsecond_to_datetime(micro):
def
_crow_timestamp_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bool row to python row
"""
_timstamp_converter
=
_convert_millisecond_to_datetime
_tim
e
stamp_converter
=
_convert_millisecond_to_datetime
if
micro
:
_timstamp_converter
=
_convert_microsecond_to_datetime
_tim
e
stamp_converter
=
_convert_microsecond_to_datetime
if
num_of_rows
>
0
:
return
list
(
map
(
_timstamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_longlong
))[:
abs
(
num_of_rows
)][::
-
1
]))
return
list
(
map
(
_tim
e
stamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_longlong
))[:
abs
(
num_of_rows
)][::
-
1
]))
else
:
return
list
(
map
(
_timstamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_longlong
))[:
abs
(
num_of_rows
)]))
return
list
(
map
(
_tim
e
stamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_longlong
))[:
abs
(
num_of_rows
)]))
def
_crow_bool_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bool row to python row
...
...
@@ -144,6 +144,8 @@ class CTaosInterface(object):
libtaos
.
taos_use_result
.
restype
=
ctypes
.
c_void_p
libtaos
.
taos_fetch_row
.
restype
=
ctypes
.
POINTER
(
ctypes
.
c_void_p
)
libtaos
.
taos_errstr
.
restype
=
ctypes
.
c_char_p
libtaos
.
taos_subscribe
.
restype
=
ctypes
.
c_void_p
libtaos
.
taos_consume
.
restype
=
ctypes
.
c_void_p
def
__init__
(
self
,
config
=
None
):
'''
...
...
@@ -252,6 +254,41 @@ class CTaosInterface(object):
"""
return
CTaosInterface
.
libtaos
.
taos_affected_rows
(
connection
)
@
staticmethod
def
subscribe
(
connection
,
restart
,
topic
,
sql
,
interval
):
"""Create a subscription
@restart boolean,
@sql string, sql statement for data query, must be a 'select' statement.
@topic string, name of this subscription
"""
return
ctypes
.
c_void_p
(
CTaosInterface
.
libtaos
.
taos_subscribe
(
connection
,
1
if
restart
else
0
,
ctypes
.
c_char_p
(
topic
.
encode
(
'utf-8'
)),
ctypes
.
c_char_p
(
sql
.
encode
(
'utf-8'
)),
None
,
None
,
interval
))
@
staticmethod
def
consume
(
sub
):
"""Consume data of a subscription
"""
result
=
ctypes
.
c_void_p
(
CTaosInterface
.
libtaos
.
taos_consume
(
sub
))
fields
=
[]
pfields
=
CTaosInterface
.
fetchFields
(
result
)
for
i
in
range
(
CTaosInterface
.
libtaos
.
taos_num_fields
(
result
)):
fields
.
append
({
'name'
:
pfields
[
i
].
name
.
decode
(
'utf-8'
),
'bytes'
:
pfields
[
i
].
bytes
,
'type'
:
ord
(
pfields
[
i
].
type
)})
return
result
,
fields
@
staticmethod
def
unsubscribe
(
sub
,
keepProgress
):
"""Cancel a subscription
"""
CTaosInterface
.
libtaos
.
taos_unsubscribe
(
sub
,
1
if
keepProgress
else
0
)
@
staticmethod
def
useResult
(
connection
):
'''Use result after calling self.query
...
...
@@ -275,8 +312,8 @@ class CTaosInterface(object):
if
num_of_rows
==
0
:
return
None
,
0
blocks
=
[
None
]
*
len
(
fields
)
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
blocks
=
[
None
]
*
len
(
fields
)
for
i
in
range
(
len
(
fields
)):
data
=
ctypes
.
cast
(
pblock
,
ctypes
.
POINTER
(
ctypes
.
c_void_p
))[
i
]
...
...
@@ -351,4 +388,20 @@ class CTaosInterface(object):
def
errStr
(
connection
):
"""Return the error styring
"""
return
CTaosInterface
.
libtaos
.
taos_errstr
(
connection
)
\ No newline at end of file
return
CTaosInterface
.
libtaos
.
taos_errstr
(
connection
)
if
__name__
==
'__main__'
:
cinter
=
CTaosInterface
()
conn
=
cinter
.
connect
()
print
(
'Query return value: {}'
.
format
(
cinter
.
query
(
conn
,
'show databases'
)))
print
(
'Affected rows: {}'
.
format
(
cinter
.
affectedRows
(
conn
)))
result
,
des
=
CTaosInterface
.
useResult
(
conn
)
data
,
num_of_rows
=
CTaosInterface
.
fetchBlock
(
result
,
des
)
print
(
data
)
cinter
.
close
(
conn
)
\ No newline at end of file
src/connector/python/windows/python2/taos/connection.py
浏览文件 @
a7eaa8ad
# from .cursor import TDengineCursor
from
.cursor
import
TDengineCursor
from
.subscription
import
TDengineSubscription
from
.cinterface
import
CTaosInterface
class
TDengineConnection
(
object
):
...
...
@@ -15,7 +15,8 @@ class TDengineConnection(object):
self
.
_config
=
None
self
.
_chandle
=
None
self
.
config
(
**
kwargs
)
if
len
(
kwargs
)
>
0
:
self
.
config
(
**
kwargs
)
def
config
(
self
,
**
kwargs
):
# host
...
...
@@ -50,6 +51,14 @@ class TDengineConnection(object):
"""
return
CTaosInterface
.
close
(
self
.
_conn
)
def
subscribe
(
self
,
restart
,
topic
,
sql
,
interval
):
"""Create a subscription.
"""
if
self
.
_conn
is
None
:
return
None
sub
=
CTaosInterface
.
subscribe
(
self
.
_conn
,
restart
,
topic
,
sql
,
interval
)
return
TDengineSubscription
(
sub
)
def
cursor
(
self
):
"""Return a new Cursor object using the connection.
"""
...
...
src/connector/python/windows/python2/taos/subscription.py
0 → 100644
浏览文件 @
a7eaa8ad
from
.cinterface
import
CTaosInterface
from
.error
import
*
class
TDengineSubscription
(
object
):
"""TDengine subscription object
"""
def
__init__
(
self
,
sub
):
self
.
_sub
=
sub
def
consume
(
self
):
"""Consume rows of a subscription
"""
if
self
.
_sub
is
None
:
raise
OperationalError
(
"Invalid use of consume"
)
result
,
fields
=
CTaosInterface
.
consume
(
self
.
_sub
)
buffer
=
[[]
for
i
in
range
(
len
(
fields
))]
print
(
buffer
)
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
result
,
fields
)
if
num_of_fields
==
0
:
break
for
i
in
range
(
len
(
fields
)):
buffer
[
i
].
extend
(
block
[
i
])
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
close
(
self
,
keepProgress
=
True
):
"""Close the Subscription.
"""
if
self
.
_sub
is
None
:
return
False
CTaosInterface
.
unsubscribe
(
self
.
_sub
,
keepProgress
)
return
True
if
__name__
==
'__main__'
:
from
.connection
import
TDengineConnection
conn
=
TDengineConnection
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
database
=
"test"
)
# Generate a cursor object to run SQL commands
sub
=
conn
.
subscribe
(
True
,
"test"
,
"select * from meters;"
,
1000
)
for
i
in
range
(
0
,
10
):
data
=
sub
.
consume
()
for
d
in
data
:
print
(
d
)
sub
.
close
()
conn
.
close
()
\ No newline at end of file
src/connector/python/windows/python3/taos/cinterface.py
浏览文件 @
a7eaa8ad
此差异已折叠。
点击以展开。
src/connector/python/windows/python3/taos/connection.py
浏览文件 @
a7eaa8ad
# from .cursor import TDengineCursor
from
.cursor
import
TDengineCursor
from
.cinterface
import
CTaosInterface
class
TDengineConnection
(
object
):
""" TDengine connection object
"""
def
__init__
(
self
,
*
args
,
**
kwargs
):
self
.
_conn
=
None
self
.
_host
=
None
self
.
_user
=
"root"
self
.
_password
=
"taosdata"
self
.
_database
=
None
self
.
_port
=
0
self
.
_config
=
None
self
.
_chandle
=
None
if
len
(
kwargs
)
>
0
:
self
.
config
(
**
kwargs
)
def
config
(
self
,
**
kwargs
):
# host
if
'host'
in
kwargs
:
self
.
_host
=
kwargs
[
'host'
]
# user
if
'user'
in
kwargs
:
self
.
_user
=
kwargs
[
'user'
]
# password
if
'password'
in
kwargs
:
self
.
_password
=
kwargs
[
'password'
]
# database
if
'database'
in
kwargs
:
self
.
_database
=
kwargs
[
'database'
]
# port
if
'port'
in
kwargs
:
self
.
_port
=
kwargs
[
'port'
]
# config
if
'config'
in
kwargs
:
self
.
_config
=
kwargs
[
'config'
]
self
.
_chandle
=
CTaosInterface
(
self
.
_config
)
self
.
_conn
=
self
.
_chandle
.
connect
(
self
.
_host
,
self
.
_user
,
self
.
_password
,
self
.
_database
,
self
.
_port
)
def
close
(
self
):
"""Close current connection.
"""
return
CTaosInterface
.
close
(
self
.
_conn
)
def
cursor
(
self
):
"""Return a new Cursor object using the connection.
"""
return
TDengineCursor
(
self
)
def
commit
(
self
):
"""Commit any pending transaction to the database.
Since TDengine do not support transactions, the implement is void functionality.
"""
pass
def
rollback
(
self
):
"""Void functionality
"""
pass
def
clear_result_set
(
self
):
"""Clear unused result set on this connection.
"""
result
=
self
.
_chandle
.
useResult
(
self
.
_conn
)[
0
]
if
result
:
self
.
_chandle
.
freeResult
(
result
)
if
__name__
==
"__main__"
:
conn
=
TDengineConnection
(
host
=
'192.168.1.107'
)
conn
.
close
()
from
.cursor
import
TDengineCursor
from
.subscription
import
TDengineSubscription
from
.cinterface
import
CTaosInterface
class
TDengineConnection
(
object
):
""" TDengine connection object
"""
def
__init__
(
self
,
*
args
,
**
kwargs
):
self
.
_conn
=
None
self
.
_host
=
None
self
.
_user
=
"root"
self
.
_password
=
"taosdata"
self
.
_database
=
None
self
.
_port
=
0
self
.
_config
=
None
self
.
_chandle
=
None
if
len
(
kwargs
)
>
0
:
self
.
config
(
**
kwargs
)
def
config
(
self
,
**
kwargs
):
# host
if
'host'
in
kwargs
:
self
.
_host
=
kwargs
[
'host'
]
# user
if
'user'
in
kwargs
:
self
.
_user
=
kwargs
[
'user'
]
# password
if
'password'
in
kwargs
:
self
.
_password
=
kwargs
[
'password'
]
# database
if
'database'
in
kwargs
:
self
.
_database
=
kwargs
[
'database'
]
# port
if
'port'
in
kwargs
:
self
.
_port
=
kwargs
[
'port'
]
# config
if
'config'
in
kwargs
:
self
.
_config
=
kwargs
[
'config'
]
self
.
_chandle
=
CTaosInterface
(
self
.
_config
)
self
.
_conn
=
self
.
_chandle
.
connect
(
self
.
_host
,
self
.
_user
,
self
.
_password
,
self
.
_database
,
self
.
_port
)
def
close
(
self
):
"""Close current connection.
"""
return
CTaosInterface
.
close
(
self
.
_conn
)
def
subscribe
(
self
,
restart
,
topic
,
sql
,
interval
):
"""Create a subscription.
"""
if
self
.
_conn
is
None
:
return
None
sub
=
CTaosInterface
.
subscribe
(
self
.
_conn
,
restart
,
topic
,
sql
,
interval
)
return
TDengineSubscription
(
sub
)
def
cursor
(
self
):
"""Return a new Cursor object using the connection.
"""
return
TDengineCursor
(
self
)
def
commit
(
self
):
"""Commit any pending transaction to the database.
Since TDengine do not support transactions, the implement is void functionality.
"""
pass
def
rollback
(
self
):
"""Void functionality
"""
pass
def
clear_result_set
(
self
):
"""Clear unused result set on this connection.
"""
result
=
self
.
_chandle
.
useResult
(
self
.
_conn
)[
0
]
if
result
:
self
.
_chandle
.
freeResult
(
result
)
if
__name__
==
"__main__"
:
conn
=
TDengineConnection
(
host
=
'192.168.1.107'
)
conn
.
close
()
print
(
"Hello world"
)
\ No newline at end of file
src/connector/python/windows/python3/taos/subscription.py
0 → 100644
浏览文件 @
a7eaa8ad
from
.cinterface
import
CTaosInterface
from
.error
import
*
class
TDengineSubscription
(
object
):
"""TDengine subscription object
"""
def
__init__
(
self
,
sub
):
self
.
_sub
=
sub
def
consume
(
self
):
"""Consume rows of a subscription
"""
if
self
.
_sub
is
None
:
raise
OperationalError
(
"Invalid use of consume"
)
result
,
fields
=
CTaosInterface
.
consume
(
self
.
_sub
)
buffer
=
[[]
for
i
in
range
(
len
(
fields
))]
print
(
buffer
)
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
result
,
fields
)
if
num_of_fields
==
0
:
break
for
i
in
range
(
len
(
fields
)):
buffer
[
i
].
extend
(
block
[
i
])
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
close
(
self
,
keepProgress
=
True
):
"""Close the Subscription.
"""
if
self
.
_sub
is
None
:
return
False
CTaosInterface
.
unsubscribe
(
self
.
_sub
,
keepProgress
)
return
True
if
__name__
==
'__main__'
:
from
.connection
import
TDengineConnection
conn
=
TDengineConnection
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
database
=
"test"
)
# Generate a cursor object to run SQL commands
sub
=
conn
.
subscribe
(
True
,
"test"
,
"select * from meters;"
,
1000
)
for
i
in
range
(
0
,
10
):
data
=
sub
.
consume
()
for
d
in
data
:
print
(
d
)
sub
.
close
()
conn
.
close
()
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录