簡體   English   中英

在MySQL中查詢大量數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM