Commit 6f85727b authored by 张晓彤's avatar 张晓彤

更新锁定禁止,更新穿越装载区,更新二次调度

parent 0481fc30
...@@ -126,7 +126,7 @@ def dispatch_request(): ...@@ -126,7 +126,7 @@ def dispatch_request():
submission = DispatchSubmission(dump, excavator, truck) submission = DispatchSubmission(dump, excavator, truck)
# 实例化调度分组 # 实例化调度分组
group = Group(group_id, truck, pre_sch) group = Group(group_id, truck, pre_sch, excavator, dump)
# 更新调度分组信息 # 更新调度分组信息
group.info_update() group.info_update()
......
{ {
"para": { "para": {
"log_path": "./Logs/", "log_path": "/usr/local/fleet-log/dispatch",
"empty_speed": 17, "empty_speed": 17,
"heavy_speed": 17, "heavy_speed": 17,
"dump_target_mass": 5000, "dump_target_mass": 5000,
...@@ -8,23 +8,23 @@ ...@@ -8,23 +8,23 @@
}, },
"mysql": { "mysql": {
"host": "172.16.0.103", "host": "192.168.9.152",
"port": "3306", "port": "3306",
"user": "root", "user": "root",
"password": "Huituo@123", "password": "Huituo@123",
"database": "ht_zhunneng_0913" "database": "waytous"
}, },
"postgresql": { "postgresql": {
"host": "172.16.0.103", "host": "192.168.9.152",
"port": "5432", "port": "5432",
"user": "postgres", "user": "postgres",
"password": "Huituo@123", "password": "Huituo@123",
"database": "gis_zhunneng_0913" "database": "shenbao_2021520"
}, },
"redis": { "redis": {
"host": "172.16.0.103", "host": "192.168.9.152",
"password": "Huituo@123" "password": "Huituo@123"
} }
} }
\ No newline at end of file
...@@ -6,15 +6,6 @@ ...@@ -6,15 +6,6 @@
# @File : group.py # @File : group.py
# @Software: PyCharm # @Software: PyCharm
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2022/5/30 15:35
# @Author : Opfer
# @Site :
# @File : group.py
# @Software: PyCharm
from data.dispatchInfo import * from data.dispatchInfo import *
from bidict import bidict from bidict import bidict
from alg.algorithm import AlgorithmBase,DistributionRatio from alg.algorithm import AlgorithmBase,DistributionRatio
...@@ -94,6 +85,10 @@ class Group: ...@@ -94,6 +85,10 @@ class Group:
self.unload_area_uuid_index_dict = bidict() self.unload_area_uuid_index_dict = bidict()
self.dump_uuid_index_dict = bidict() self.dump_uuid_index_dict = bidict()
# device bind
self.dump_truck_bind = {}
self.excavator_truck_bind = {}
# truck info. # truck info.
self.truck_info_list = {} self.truck_info_list = {}
...@@ -218,6 +213,34 @@ class Group: ...@@ -218,6 +213,34 @@ class Group:
# self.logger.info(es) # self.logger.info(es)
# self.logger.info("error-12") # self.logger.info("error-12")
def update_device_bind(self):
"""
update device bind.
:return:
"""
self.dump_truck_bind = {}
self.excavator_truck_bind = {}
for truck_id, dump_id in self.truck.truck_dump_bind.items():
if dump_id not in self.dump_truck_bind:
self.dump_truck_bind[dump_id] = [truck_id]
else:
self.dump_truck_bind[dump_id].append(truck_id)
for truck_id, excavator_id in self.truck.truck_excavator_bind.items():
if excavator_id not in self.excavator_truck_bind:
self.excavator_truck_bind[excavator_id] = [truck_id]
else:
self.excavator_truck_bind[excavator_id].append(truck_id)
def get_device_exclude(self, truck_id):
"""
get device exclude modify vector.
:param truck_id: request truck id
:return:
"""
pass
def info_update(self): def info_update(self):
""" """
...@@ -252,12 +275,15 @@ class Group: ...@@ -252,12 +275,15 @@ class Group:
if self.group_mode == 1: if self.group_mode == 1:
if truck_task in [-2, 3, 4, 5]: if truck_task in [-2, 3, 4, 5]:
try: try:
if i in self.truck.truck_excavator_bind:
next_excavator_id = self.truck.truck_excavator_bind[i]
else:
next_excavator_value = s.solve(truck_info) next_excavator_value = s.solve(truck_info)
# next_excavator_value = s.solve(i, truck_task, truck_trip) # next_excavator_value = s.solve(i, truck_task, truck_trip)
# min_index = next_excavator_list.index(min(next_excavator_list)) # min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(next_excavator_value) min_index = np.argmin(next_excavator_value)
next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index] next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index]
if truck_task == -2: if truck_task == -2:
next_unload_area_id = "Park" next_unload_area_id = "Park"
else: else:
...@@ -280,6 +306,10 @@ class Group: ...@@ -280,6 +306,10 @@ class Group:
self.logger.info(self.unload_area_uuid_index_dict) self.logger.info(self.unload_area_uuid_index_dict)
self.logger.info(self.excavator_uuid_index_dict) self.logger.info(self.excavator_uuid_index_dict)
if i in self.truck.truck_dump_bind:
dump_uuid_to_unload_area_uuid_dict = get_value("dump_uuid_to_unload_area_uuid_dict")
next_unload_area_id = dump_uuid_to_unload_area_uuid_dict[self.truck.truck_dump_bind[i]]
else:
tmp = self.group_walk_available[ tmp = self.group_walk_available[
self.excavator_uuid_index_dict[next_excavator_id], :].flatten() self.excavator_uuid_index_dict[next_excavator_id], :].flatten()
self.logger.info(f'group_walk_available_pick {tmp}') self.logger.info(f'group_walk_available_pick {tmp}')
...@@ -304,6 +334,9 @@ class Group: ...@@ -304,6 +334,9 @@ class Group:
if truck_task in [-2, 3, 4, 5]: if truck_task in [-2, 3, 4, 5]:
try: try:
if i in self.truck.truck_excavator_bind:
next_excavator_id = self.truck.truck_excavator_bind[i]
else:
next_excavator_value = s.solve(truck_info) next_excavator_value = s.solve(truck_info)
# min_index = next_excavator_list.index(min(next_excavator_list)) # min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(next_excavator_value) min_index = np.argmin(next_excavator_value)
...@@ -354,6 +387,11 @@ class Group: ...@@ -354,6 +387,11 @@ class Group:
try: try:
if i in self.truck.truck_dump_bind:
dump_uuid_to_unload_area_uuid_dict = get_value("dump_uuid_to_unload_area_uuid_dict")
next_unload_area_id = dump_uuid_to_unload_area_uuid_dict[self.truck.truck_dump_bind[i]]
else:
next_unload_area_id = DistributionRatio(next_exactor_id, self.truck).ratio_main() next_unload_area_id = DistributionRatio(next_exactor_id, self.truck).ratio_main()
except Exception as es: except Exception as es:
......
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2022/8/18 13:53
# @Author : Opfer
# @Site :
# @File : ruler.py
# @Software: PyCharm
\ No newline at end of file
...@@ -69,6 +69,10 @@ class TruckInfo(WalkManage): ...@@ -69,6 +69,10 @@ class TruckInfo(WalkManage):
self.dump_hold_truck_num = np.zeros(get_value("dynamic_dump_num")) self.dump_hold_truck_num = np.zeros(get_value("dynamic_dump_num"))
# 各装载区矿卡数量 # 各装载区矿卡数量
self.excavator_hold_truck_num = np.zeros(get_value("dynamic_excavator_num")) self.excavator_hold_truck_num = np.zeros(get_value("dynamic_excavator_num"))
# 驶往各卸载区矿卡集合
self.dump_hold_truck_list = {item: [] for item in get_value("dynamic_dump_set")}
# 驶往各装载区矿卡集合
self.excavator_hold_truck_list = {item: [] for item in get_value("dynamic_excavator_set")}
# 日志 # 日志
self.logger = get_logger("zxt.truck") self.logger = get_logger("zxt.truck")
# # 初始化读取参数 # # 初始化读取参数
...@@ -438,6 +442,11 @@ class TruckInfo(WalkManage): ...@@ -438,6 +442,11 @@ class TruckInfo(WalkManage):
# 目的地矿卡数加一 # 目的地矿卡数加一
self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1 self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
# 目的地矿卡集合增加
if item.exactor_id not in self.excavator_hold_truck_list:
self.excavator_hold_truck_list[item.exactor_id] = [truck_id]
else:
self.excavator_hold_truck_list[item.exactor_id].append(truck_id)
# 若矿卡状态为重载(含卸载出场) # 若矿卡状态为重载(含卸载出场)
elif task in [3, 4, 5]: elif task in [3, 4, 5]:
...@@ -446,6 +455,11 @@ class TruckInfo(WalkManage): ...@@ -446,6 +455,11 @@ class TruckInfo(WalkManage):
# 目的地矿卡数加一 # 目的地矿卡数加一
self.dump_hold_truck_num[end_eqp_index] = self.dump_hold_truck_num[end_eqp_index] + 1 self.dump_hold_truck_num[end_eqp_index] = self.dump_hold_truck_num[end_eqp_index] + 1
# 目的地矿卡集合增加
if item.dump_id not in self.dump_hold_truck_list:
self.dump_hold_truck_list[item.dump_id] = [truck_id]
else:
self.dump_hold_truck_list[item.dump_id].append(truck_id)
# 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡 # 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡
else: else:
pass pass
...@@ -753,6 +767,10 @@ class TruckInfo(WalkManage): ...@@ -753,6 +767,10 @@ class TruckInfo(WalkManage):
self.dump_hold_truck_num = np.zeros(get_value("dynamic_dump_num")) self.dump_hold_truck_num = np.zeros(get_value("dynamic_dump_num"))
# 各装载区矿卡数量 # 各装载区矿卡数量
self.excavator_hold_truck_num = np.zeros(get_value("dynamic_excavator_num")) self.excavator_hold_truck_num = np.zeros(get_value("dynamic_excavator_num"))
# 驶往各卸载区矿卡集合
self.dump_hold_truck_list = {item: [] for item in get_value("dynamic_dump_set")}
# 驶往各装载区矿卡集合
self.excavator_hold_truck_list = {item: [] for item in get_value("dynamic_excavator_set")}
# 对象域更新 # 对象域更新
self.dump = dump self.dump = dump
self.excavator = excavator self.excavator = excavator
......
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2022/8/29 15:51
# @Author : Opfer
# @Site :
# @File : __init__.py
# @Software: PyCharm
\ No newline at end of file
This diff is collapsed.
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2022/8/3 17:53
# @Author : Opfer
# @Site :
# @File : redispatch.py
# @Software: PyCharm
from flask import Flask, request
from flask.json import jsonify
from para_config import *
from equipment.truck import TruckInfo
from equipment.excavator import ExcavatorInfo
from equipment.dump import DumpInfo
from core.dispatcher import Dispatcher, PreSchedule
from core.group import Group
from flask_caching import Cache
from alg.algorithm import ExpectedTime
from data.dispatchInfo import DispatchInfo
from core.dispatcher import DispatchSubmission
from graph_load import graph_construct
config = {
"DEBUG": True, # some Flask specific configs
"CACHE_TYPE": "SimpleCache", # Flask-Caching related configs
"CACHE_DEFAULT_TIMEOUT": 300
}
app = Flask(__name__)
app.config.from_mapping(config)
cache = Cache(app)
def update_truck_loacate(truck_id):
# 读取矿卡所在路段信息
try:
truck_locate_dict = {}
device_name_set = redis2.keys()
for item in device_name_set:
item = item.decode(encoding='utf-8')
# json_value = json.loads(redis2.get(item))
key_value_dict = redis2.hgetall(item)
device_type = key_value_dict[str_to_byte('type')]
is_online = key_value_dict[str_to_byte('online')]
key_set = key_value_dict.keys()
if (device_type == str_to_byte("1")) \
and (str_to_byte('online') in key_set) \
and (bytes.decode(is_online) in ["true" or "True"]) \
and (str_to_byte('laneId') in key_set):
truck_locate = key_value_dict[str_to_byte('laneId')]
truck_locate_dict[get_value("truck_name_to_uuid_dict")[item]] = eval(truck_locate)
except Exception as es:
logger.error(" ")
return truck_locate_dict[truck_id]
@app.route("/redispatch", methods=["POST"])
def dispatch_request():
# 获取报文数据
data_json = request.get_json()
# 车辆id
truck_id = data_json.get("truck_id")
# 调度开始时间
rtd_start_time = datetime.now()
# 初始化日志
set_log()
# 获取日志器
logger = get_logger("zxt.truck-request")
# 更新周期参数
logger.info("#####################################请求调度更新开始#####################################")
try:
# 清空数据库缓存
session_mysql.commit()
session_mysql.flush()
# 清空数据库缓存
session_postgre.commit()
session_postgre.flush()
except Exception as es:
logger.error("数据库访问异常")
logger.error(es)
return jsonify(msg="未知异常, 请联系管理员", code=501)
try:
# 全局参数更新
global_period_para_update()
# get_global_para_from_cache(cache)
except Exception as es:
logger.error("全局参数更新异常")
logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
return jsonify(msg="未知异常, 请联系管理员", code=502)
try:
# 更新调度信息
DispatchInfo.reset()
DispatchInfo.update_device_group_structure()
if group_id not in DispatchInfo.truck_group_dict:
raise Exception("请求调度车辆不存在")
DispatchInfo.update_route_distance()
DispatchInfo.update_group_mode()
DispatchInfo.update_group_name()
except Exception as es:
logger.error("调度信息更新异常")
logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
return jsonify(msg="未知异常, 请联系管理员", code=503)
logger.info("Dispatchinfo,更新后信息")
logger.info("group_set")
logger.info(DispatchInfo.group_set)
logger.info("group_excavator_dict")
logger.info(DispatchInfo.group_excavator_dict)
logger.info("group_unload_area_dict")
logger.info(DispatchInfo.group_unload_area_dict)
logger.info("group_truck_dict")
logger.info(DispatchInfo.group_truck_dict)
logger.info("group_mode")
logger.info(DispatchInfo.group_mode)
logger.info("load_distance")
logger.info(DispatchInfo.load_distance)
logger.info("unload_distance")
logger.info(DispatchInfo.unload_distance)
try:
# 实例化设备对象
dump = DumpInfo()
excavator = ExcavatorInfo()
truck = TruckInfo(dump, excavator)
group_id = DispatchInfo.truck_group_dict[truck_id]
# 设备信息更新
dump.dump_para_period_update()
excavator.excavator_para_period_update()
truck.truck_para_period_update(dump, excavator)
truck.state_period_update()
# 实例化调度预测器
pre_sch = PreSchedule(truck, excavator, dump)
# 实例化输出器
submission = DispatchSubmission(dump, excavator, truck)
# 实例化调度分组
group = Group(group_id, truck, pre_sch)
# 更新调度分组信息
group.info_update()
truck_trip = truck.get_truck_current_trip()[truck.truck_uuid_to_index_dict[truck_id]]
truck_task = truck.get_truck_current_task()[truck_id]
truck_lane = update_truck_loacate(truck_id)
excavators = DispatchInfo.group_excavator_dict[group_id]
dumps = DispatchInfo.dump_group_dict[group_id]
topo = graph_construct()
next_target = None
if truck_task in [-2, 0]:
excavator_distance_dict = topo.get_load_target_node_real(truck_lane, None)
MAX_DIS = 100000000
for excavator_id in excavators:
if excavator_distance_dict[excavator_id] < MAX_DIS:
next_target = excavator_id
MAX_DIS = excavator_distance_dict[excavator_id]
elif truck_task == 3:
dump_distance_dict = topo.get_unload_target_node_real(truck_lane, None)
MAX_DIS = 100000000
for dump_id in dumps:
if dump_distance_dict[dump_id] < MAX_DIS:
next_target = dump_id
MAX_DIS = dump_distance_dict[dump_id]
except Exception as es:
logger.error("对象实例化异常")
logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
return jsonify(msg="未知异常, 请联系管理员", code=504)
try:
# 调度分组派车计划计算
try:
truck_dispatch_plan_dict = group.group_dispatch(ExpectedTime)
except Exception as es:
logger.error(es)
logger.error(f'分组{group.group_id} 调度计算异常')
try:
logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}')
submission.group_dispatch_to_redis(group, truck_dispatch_plan_dict)
except Exception as es:
logger.error(es)
logger.error(f'分组{group.group_id} 调度写入异常')
except Exception as es:
logger.error("最外层异常捕获")
logger.error(es)
return jsonify(msg="未知异常, 请联系管理员", code=505)
session_mysql.close()
session_postgre.close()
logger.info("#####################################请求调度更新结束#####################################")
# 调度结束时间
rtd_end_time = datetime.now()
print(f'调度时耗 {rtd_end_time - rtd_start_time}')
return jsonify(msg="success", code=0)
\ No newline at end of file
...@@ -60,15 +60,15 @@ def set_log(): ...@@ -60,15 +60,15 @@ def set_log():
# 创建日志目录 # 创建日志目录
if not os.path.exists(log_path): # if not os.path.exists(log_path):
os.mkdir(log_path) # os.mkdir(log_path)
# logging初始化工作 # logging初始化工作
logging.basicConfig() logging.basicConfig()
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60) # timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=30*1024*1024, backupCount=10, encoding="utf-8") # filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=30*1024*1024, backupCount=10, encoding="utf-8")
# filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10, encoding="utf-8") filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10, encoding="utf-8")
# 设置后缀名称,跟strftime的格式一样 # 设置后缀名称,跟strftime的格式一样
filehandler.suffix = "%Y-%m-%d_%H-%M.log" filehandler.suffix = "%Y-%m-%d_%H-%M.log"
......
...@@ -284,13 +284,15 @@ class Lane(Base): ...@@ -284,13 +284,15 @@ class Lane(Base):
MaxSpeed = Column(Float) MaxSpeed = Column(Float)
StartNodeId = Column(VARCHAR(36)) StartNodeId = Column(VARCHAR(36))
EndNodeId = Column(VARCHAR(36)) EndNodeId = Column(VARCHAR(36))
Type = Column(Integer)
def __init__(self, Id, Length, MaxSpeed, StartNodeId, EndNodeId): def __init__(self, Id, Length, MaxSpeed, StartNodeId, EndNodeId, Type):
self.Id = Id self.Id = Id
self.Length = Length self.Length = Length
self.MaxSpeed = MaxSpeed self.MaxSpeed = MaxSpeed
self.StartNodeId = StartNodeId self.StartNodeId = StartNodeId
self.EndNodeId = EndNodeId self.EndNodeId = EndNodeId
self.Type = Type
class Dispatch(Base): class Dispatch(Base):
...@@ -507,6 +509,7 @@ class DumpArea(Base): ...@@ -507,6 +509,7 @@ class DumpArea(Base):
__tablename__ = 'Geo_DumpArea' __tablename__ = 'Geo_DumpArea'
Id = Column(VARCHAR(50), primary_key=True) Id = Column(VARCHAR(50), primary_key=True)
Name = Column(VARCHAR(36))
BindList = Column(VARCHAR(1000)) BindList = Column(VARCHAR(1000))
UnloadAbililty = Column(Float) UnloadAbililty = Column(Float)
Disabled = Column(Integer) Disabled = Column(Integer)
...@@ -517,8 +520,9 @@ class DumpArea(Base): ...@@ -517,8 +520,9 @@ class DumpArea(Base):
ExitNodeId = Column(VARCHAR(50)) ExitNodeId = Column(VARCHAR(50))
Name = Column(VARCHAR(36)) Name = Column(VARCHAR(36))
def __init__(self, Id, BindList, UnloadAbililty, Disabled, Materials, Priority, DumpEquipmentId, EntranceNodeId,ExitNodeId, Name): def __init__(self, Id, Name, BindList, UnloadAbililty, Disabled, Materials, Priority, DumpEquipmentId, EntranceNodeId,ExitNodeId):
self.Id = Id self.Id = Id
self.Name = Name
self.BindList = BindList self.BindList = BindList
self.UnloadAbililty = UnloadAbililty self.UnloadAbililty = UnloadAbililty
self.Disabled = Disabled self.Disabled = Disabled
...@@ -527,21 +531,22 @@ class DumpArea(Base): ...@@ -527,21 +531,22 @@ class DumpArea(Base):
self.DumpEquipmentId = DumpEquipmentId self.DumpEquipmentId = DumpEquipmentId
self.EntranceNodeId = EntranceNodeId self.EntranceNodeId = EntranceNodeId
self.ExitNodeId = ExitNodeId self.ExitNodeId = ExitNodeId
self.Name = Name
class DiggingWorkArea(Base): class DiggingWorkArea(Base):
__tablename__ = 'Geo_DiggingWorkArea' __tablename__ = 'Geo_DiggingWorkArea'
Id = Column(VARCHAR(50), primary_key=True) Id = Column(VARCHAR(50), primary_key=True)
Name = Column(VARCHAR(36))
Material = Column(VARCHAR(36)) Material = Column(VARCHAR(36))
ExactorId = Column(VARCHAR(36)) ExactorId = Column(VARCHAR(36))
ExactorUuid = Column(VARCHAR(50)) ExactorUuid = Column(VARCHAR(50))
EntranceNodeId = Column(VARCHAR(50)) EntranceNodeId = Column(VARCHAR(50))
ExitNodeId = Column(VARCHAR(50)) ExitNodeId = Column(VARCHAR(50))
def __init__(self, Id, Material, ExactorId, ExactorUuid, EntranceNodeId, ExitNodeId): def __init__(self, Id, Name, Material, ExactorId, ExactorUuid, EntranceNodeId, ExitNodeId):
self.Id = Id self.Id = Id
self.Name = Name
self.Material = Material self.Material = Material
self.ExactorId = ExactorId self.ExactorId = ExactorId
self.ExactorUuid = ExactorUuid self.ExactorUuid = ExactorUuid
......
from path_plan.topo_graph import * # from redispatch.topo_graph import *
import networkx as nx # import networkx as nx
import matplotlib.pyplot as plt # import matplotlib.pyplot as plt
#
# topo = Topo()
# topo.generate_topo_graph()
# load_G = topo.get_load_G()
# pos = nx.shell_layout(load_G)
# nx.draw(load_G, pos, with_labels=True, node_color='red', edge_color='blue', font_size=18, width=5, node_size=600,
# alpha=0.5)
# # topo.get_unload_target_node_real()
# plt.show()
topo = Topo() A = [['309705a0-5ddf-4559-b6c4-ee17a57677ad', 9.04], ['899705a0-5ddf-4559-b6c4-ee17a57677ad', 6.05]]
topo.generate_topo_graph() A = sorted(A, key=lambda item: item[1])
load_G = topo.get_load_G() print(A)
pos = nx.shell_layout(load_G) \ No newline at end of file
nx.draw(load_G, pos, with_labels=True, node_color='red', edge_color='blue', font_size=18, width=5, node_size=600,
alpha=0.5)
plt.show()
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2022/8/2 17:07
# @Author : Opfer
# @Site :
# @File : topo_sql.py.py
# @Software: PyCharm
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print ("数据库打开成功")
cursor = c.execute("SELECT * FROM GRAPH")
# c.execute("INSERT INTO GRAPH (id, startNodeId, endNodeId, distance) VALUES ('text_id12', 'as4343', 'sdsdsd', 20000.00 )")
# conn.commit()
for row in cursor:
print("id = ", row[0])
print("startNodeId = ", row[1])
print("endNodeId = ", row[2])
print("distance= ", row[3])
print("dir= ", row[4])
print ("数据操作成功")
conn.close()
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment