私信  •  关注

Parfait

Parfait 最近创建的主题
Parfait 最近回复了
4 年前
回复了 Parfait 创建的主题 » 使用python时SQL mycursor.execute INSERT代码失败

考虑将准备好的SQL语句与数据分离的查询参数化,并避免处理混乱的引号或连接:

sql = "INSERT INTO characters VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"

data = [1,"Bob","Sagen",7,4,4,"Will","Bob's Abs Capacity","Left Hook","Forhead"]

mycursor.execute(sql, data)
5 年前
回复了 Parfait 创建的主题 » Python只在SQLite数据库中插入一行

避免循环,运行一个 INSERT INTO ... SELECT 查询。现在,您在循环内外重用同一个游标,这会导致处理问题。使用两个不同的游标或有效地组合并让数据库引擎运行操作查询:

sql = '''INSERT INTO Counts (org, [count])
         SELECT SUBSTR(email, INSTR(email, '@')+1) AS org, 
                SUM(count) as [count]
         FROM Em 
         GROUP BY org 
         ORDER BY count DESC
      '''

cur.execute(sql)
conn.commit()
5 年前
回复了 Parfait 创建的主题 » 如何在Windows 10命令提示符下在MySQL中正确执行SQL文件?

MySQL CLI(命令行界面)与其他CLI s或shell程序一样,包括数据库(Postgres的psql、SQLite的sqlite3、SQL Server的sqlcmd、Oracle的sqlplus)、langauges(python.exe、perl.exe、php.exe、r.exe)还有一些是可执行文件(.exe),它们不像大多数软件.exe那样使用gui启动,而是在终端窗口中引发会话。

命令行解释器(如windows的powershell和cmd.exe)或unix的(macos/linux)bash终端用于启动此类cli会话。实际上,有两种方法可以运行mysql命令:

  1. 呼叫 mysql.exe 没有开长会的争论。

  2. 启动mysql会话并运行单独的调用。

您的问题是上面两种方法的结合,在这两种方法中,您尝试对 mysql.exe文件 带着论据 里面 mysql.exe文件 或者在会话中运行其顶级参数。在cli中,解析器只解释特殊的mysql命令,如 source 直接SQL查询不可执行, mysql ,调用或连接参数( -h, -u )如果没有它的shell命令调用方: \! .

只需在cli会话之外使用适当的调用:

cd C:\amp64\bin\mysql\mysql5.7.23\bin
mysql -h localhost -u bookorama -p < bookorama.sql

或在CLI会话中:

cd C:\amp64\bin\mysql\mysql5.7.23\bin
mysql -h localhost -u bookorama -p
mysql> source bookorama.sql

尽管如此,你可以做相反的事。

  • 在外部运行命令查询:

    mysql -h localhost -u bookorama -p -e "source bookorama.sql"
    
  • 呼叫内部终端呼叫:

    mysql> \! mysql -h localhost -u bookorama -pXXXXX < bookorama.sql
    
5 年前
回复了 Parfait 创建的主题 » 在python中使用数据帧避免for循环

考虑 merging 这两个数据帧保持彼此之间的匹配,然后将pandas系列向下转换为 list . 目前,您正在将numpy数组(不是单个值)或0存储到列表中。

merged_df = pd.merge(GroupedCode, ICD9, left_on='ICD9CMCode', right_on='Code9')

Freq = merged_df['TotalDiag'].tolist()

甚至考虑 unique() 对于多个内部联接匹配的唯一值。

Freq = merged_df['TotalDiag'].unique().tolist()
5 年前
回复了 Parfait 创建的主题 » 从r插入mysql

考虑为运行sql的任何应用程序层(如r)设置参数化的编程行业标准。使用这种方法,您可以避免任何字符串插值或混乱的引号附件的需要。r的dbi标准有几种方法,其中之一是 sqlInterpolate :

# PREPARED STATEMENT (NO DATA) QMARKS REQUIRED BUT NAMES CAN CHANGE
sql <- "INSERT INTO trade_data (Col1, Col2, Col3, col4) 
        VALUES (?param1, ?param2, ?param3, ?param4)"

ch <- DBI::dbConnect(MySQL())
dbSendQuery(ch, 'set character set "utf8"')
dbSendQuery(ch, 'SET NAMES utf8')

for (i in 1:nrow(test)) {
  # BIND PARAMS
  query <- sqlInterpolate(conn, sql, param1 = "0", param2 = test[i, 1], 
                          param3 = test[i, 2], param4 = test[i, 3])
  # EXECUTE QUERY
  dbSendQuery(ch, query)
}