gpt4 book ai didi

python - 警告 : Data truncated for column 'src_address' at row 1

转载 作者:行者123 更新时间:2023-12-01 00:50:21 27 4
gpt4 key购买 nike

from pox.core import core
import pox.openflow.libopenflow_01 as of
import re

import datetime
import time
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql.expression import exists
log = core.getLogger()

engine = create_engine('mysql://root@192.168.129.139/nwtopology', echo=False)
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()

class SourcetoPort(Base):
""""""
__tablename__ = 'source_to_port'
id = Column(Integer, primary_key=True)
port_no = Column(Integer)
src_address = Column(String(16),index=True)

#-----------------------------------------
def __init__(self, src_address,port_no):
""""""
self.src_address = src_address
self.port_no = port_no

#create tables
Base.metadata.create_all(engine)

def act_like_switch (self, packet, packet_in):


"""
Implement switch-like behavior.
"""
# Learn the port for the source MAC
#print "RECIEVED FROM PORT ",packet_in.in_port , "SOURCE ",packet.src ,"DEST" , packet.dst
self.mac_to_port[packet.src]=packet_in.in_port
r_res = session.query(SourcetoPort).filter_by(src_address=str(packet.src)).first()
if r_res is None:
print "inserting an entry"
start = time.time()
entry = SourcetoPort(src_address=str(packet.src) , port_no=packet_in.in_port)
#add the record to the session object
session.add(entry)
#add the record to the session object
session.commit()
end = time.time()
elapsed = end - start
print "elapsed insert time ",elapsed
else:
print "entry already present"

我有一个网络,我在其中将数据包从一台主机发送到另一台主机。预期的行为是第一次将 src_address、端口对插入到 sql 数据库中,此后它应该只执行检索操作。我已经测试过此功能使用 sqlite 与本地数据库一起正常工作。然后我转移到使用 mysql 的远程数据库。

现在我发现了

if r_res is None:

始终为真,意思是

r_res = session.query(SourcetoPort).filter_by(src_address=str(packet.src)).first()

总是失败。

我怀疑这与 mysql 的一些错误查询/添加有关,这与 sqlite 不同。

It did print out a warning as below when inserting an entry.
/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py:330: Warning: Data truncated for column 'src_address' at row 1
cursor.execute(statement, parameters)

我无法弄清楚到底是什么问题。

根据评论,我打印出了我要插入的 src_address 的大小。

 print 'length of src addreess',len(str(packet.src))
it prints 17

我已经将 src_address 的大小增加到 17,32 和 64。我仍然得到同样的错误

最佳答案

以下方法将来可能会节省您的时间。

我们还有一种无需重新创建表即可更新列的方法——使用 ALTER TABLE 查询。

alter table source_to_port modify src_address varchar(32);

this SO answer 中查看更多讨论

关于python - 警告 : Data truncated for column 'src_address' at row 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16473094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com