我想不断地将数据框行添加到 MySQL 数据库中,避免在 MySQL 中出现任何重复的条目。
我目前通过使用 df.apply() 循环遍历每一行并调用 MySQL insert ignore(duplicates) 将唯一行添加到 MySQL 数据库中来执行此操作。但是使用 pandas.apply 非常慢(10k 行需要 45 秒)。我想使用 pandas.to_sql() 方法实现这一点,该方法需要 0.5 秒才能将 10k 条目推送到数据库中,但不支持在追加模式下忽略重复。有没有一种高效快捷的方法来实现这一目标?
输入CSV
Date,Open,High,Low,Close,Volume
1994-01-03,111.7,112.75,111.55,112.65,0
1994-01-04,112.68,113.47,112.2,112.65,0
1994-01-05,112.6,113.63,112.3,113.0,0
1994-01-06,113.02,113.43,112.25,112.62,0
1994-01-07,112.55,112.8,111.5,111.88,0
1994-01-10,111.8,112.43,111.35,112.25,0
1994-01-11,112.18,112.88,112.05,112.4,0
1994-01-12,112.38,112.82,111.95,112.28,0
Run Code Online (Sandbox Code Playgroud)
代码
nifty_data.to_sql(name='eod_data', con=engine, if_exists = 'append', index=False) # option-1
nifty_data.apply(addToDb, axis=1) # option-2
def addToDb(row):
sql = "INSERT IGNORE INTO eod_data (date, open, high, low, close, volume) VALUES (%s,%s,%s,%s,%s,%s)"
val = (row['Date'], row['Open'], row['High'], row['Low'], row['Close'], row['Volume'])
mycursor.execute(sql, val)
mydb.commit()`
Run Code Online (Sandbox Code Playgroud)
option-1: doesn't allow insert ignore …
我想了解Libc如何在内存中加载共享库并在进程间共享?是否有一个libc实例加载到内存中并在所有进程之间共享,或者每个进程的内存中是每个libc实例.我不清楚libc如何在进程之间共享.
谢谢Aditya
目标:每5秒监视5个json URL,其中5个线程并行运行.
我想运行多个并行线程来监视JSON URL,每个时间间隔为n秒.我正在使用ScheduledExecutorService这个.
ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
for(NetworkBwXmlObject x : xmlDsList) {
executor.scheduleAtFixedRate(new processJsonUrl(x.getJsonUrl(),x.getId(), ctx), 0, 5, TimeUnit.SECONDS);
}
class processJsonUrl implements Runnable {
}
Run Code Online (Sandbox Code Playgroud)
这是创建5个线程来监控5个URL的正确方法.我不想在这里使用线程池.所有5个线程必须处于活动状态,直到应用程序的生命周期.
可以ScheduledExecutorService帮助我的方案或有另一种方法来实现这一目标?
谢谢
java concurrency multithreading executorservice scheduledexecutorservice