[英]Querying Huge Data in MySQL
我正在從服務器中檢索所有傳入的用戶IP地址,我已經檢索了地址並將其寫入文件。 我還從文件中過濾了IP地址,並將它們檢索到變量ip。 但是,當我無法將ip地址上傳到mysql數據庫時。
到目前為止,我有這個功能,但是沒有用。
with open("netstat.txt", 'rb') as f:
for row in f.readlines()[1:]:
columns = row.split()
if len(columns) > 2:
ip = row.split()[1]
user = row.split()[2]
ip = ip.strip('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
con = mdb.connect('server', 'user', 'pass', 'db');
with con:
cur = con.cursor()
cur.executemany("INSERT INTO Juliet_Data(ip,user) VALUES,(%s,%s)" % ip,user)
我將表設置為以下內容:
user = longtext
ip = blob
錯誤提示:
Traceback (most recent call last):
File "C:\Documents and Settings\finance\Desktop\Server
Monitoring\System Load Tracker\User Tracking\netstat.py", line 32, in
<module>
cur.execute("INSERT INTO Juliet_Data(ip) VALUES,(%s)" % ip)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 174, in
execute
self.errorhandler(self, exc, value)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36,
in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near '()' at line 1")
IP地址示例僅考察IP和用戶:
0.0.0.0:22 newjulietleft:0 LISTENING
TCP 0.0.0.0:135 newjulietleft:0 LISTENING
TCP 0.0.0.0:445 newjulietleft:0 LISTENING
TCP 0.0.0.0:1311 newjulietleft:0 LISTENING
TCP 0.0.0.0:3306 newjulietleft:0 LISTENING
TCP 0.0.0.0:3389 newjulietleft:0 LISTENING
TCP 0.0.0.0:5800 newjulietleft:0 LISTENING
TCP 0.0.0.0:5900 newjulietleft:0 LISTENING
TCP 0.0.0.0:47001 newjulietleft:0 LISTENING
TCP 0.0.0.0:49152 newjulietleft:0 LISTENING
TCP 0.0.0.0:49153 newjulietleft:0 LISTENING
TCP 0.0.0.0:49154 newjulietleft:0 LISTENING
TCP 0.0.0.0:49158 newjulietleft:0 LISTENING
TCP 0.0.0.0:49170 newjulietleft:0 LISTENING
TCP 10.22.22.22:139 newjulietleft:0 LISTENING
TCP 10.22.22.22:3389 gregk:17415 ESTABLISHED
TCP 10.22.22.22:49156 superman:microsoft-ds ESTABLISHED
TCP 10.22.22.22:49160 juliet:microsoft-ds ESTABLISHED
TCP 10.22.22.22:49164 pong:microsoft-ds ESTABLISHED
TCP 10.22.22.22:49165 ftpserve:microsoft-ds ESTABLISHED
TCP 10.22.22.22:50376 dbmlog:3306 ESTABLISHED
TCP 10.22.22.22:50377 hulk:microsoft-ds ESTABLISHED
TCP 10.22.22.22:50383 julietz:netbios-ssn TIME_WAIT
TCP 10.22.22.22:50384
,
位於VALUES,
之后VALUES,
無效
收到語法錯誤時,您只需查看錯誤指向的位置。 這個錯誤可能會令人困惑,因為它沒有給您腳本中的代碼,而是在您執行的第一個狀態(即插入語句)的mysql內部。
對於您評論中的第二個問題:
您應該使用參數化,例如:
VALUES (?, ?), (ip, user)
應該管用
cur.executemany("INSERT INTO Julient_Data (ip,user) VALUES (%s,%s)", ((ip, user),))
cur.executemany("INSERT INTO Julient_Data (ip,user) VALUES (%s,%s)", ((ip, user),('192.168.1.1', 'test1')))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.