Racket函数与SQL交互,将新行插入表中

Racket函数与SQL交互,将新行插入表中,sql,racket,Sql,Racket,我的目标是编写一个函数,在块中插入sql查询的以下值。该值是插入到新表中的两个表的联接。我可以让这个函数与python中的for循环一起工作,请参见下面的内容,但是我还无法为SQL for循环编写一个行为正常的Racket 任何关于如何将下面的python循环作为循环或函数编写的指导都将不胜感激 ### RACKET CODE THAT CURRENTLY DOES NOT BEHAVE AS PYTHON CODE BELOW ### (for ((n 2) (length-of-

我的目标是编写一个函数,在块中插入sql查询的以下值。该值是插入到新表中的两个表的联接。我可以让这个函数与python中的for循环一起工作,请参见下面的内容,但是我还无法为SQL for循环编写一个行为正常的Racket

任何关于如何将下面的python循环作为循环或函数编写的指导都将不胜感激

### RACKET CODE THAT CURRENTLY DOES NOT BEHAVE AS PYTHON CODE BELOW ###
(for ((n 2)
      (length-of-table
      (vector-ref (car (query-rows      ;
      <SQL SERVER CONNECTION >                  ;
      "SELECT COUNT(DISTINCT mjp_drug_activities_mechanism_complete.activitiesMOLREGNO) ;
      FROM mjp_drug_activities_mechanism_complete;")) ;
      0)))
     (in-query
      <SQL SERVER CONNECTION > 
      "INSERT INTO mjp_act_join_assay SELECT * FROM mjp_drug_activities_mechanism_complete LEFT JOIN mjp_assays_complete ON (mjp_drug_activities_mechanism_complete.activitiesASSAY_ID=mjp_assays_complete.assaysASSAY_ID) WHERE mjp_drug_activities_mechanism_complete.activitiesMOLREGNO>=? AND mjp_drug_activities_mechanism_complete.activitiesMOLREGNO<=?;"
      n
      length-of-table
      #:fetch 100
      )
     )

下面是我将如何翻译您的Python代码:

(require db racket/dict)
(define sql_insert "INSERT INTO ....") ;; 2 parameters
(define conn (mysql-connect ....))

(for ([i (in-range 10 800 10)])
  (printf "Current value of i is: ~s\n" i)
  (with-handlers ([exn:fail?
                   (lambda (e)
                     ;;(printf "Error: ~a\n" (exn-message e))
                     ;; Better way of showing exception in Racket:
                     ((error-display-handler) (exn-message e) e))])
    (define r (query conn sql_insert i (+ i 2)))
    (printf "Last Inserted ID: ~s\n"
            (dict-ref (simple-result-info r) 'insert-id #f))))
几点意见:

不要在查询中使用不会像INSERT查询那样返回行的SQL语句。 您的racketforloop子句与Python代码不对应。我建议你复习一下球拍的圈数,也许可以用简单的列表练习。例如,循环体最多执行两次。你明白为什么吗? 使用查询值获取一行、一列查询的值,如选择计数。。。查询 我在您的Python代码中没有看到任何块,所以我不确定您的意思。
下面是我将如何翻译您的Python代码:

(require db racket/dict)
(define sql_insert "INSERT INTO ....") ;; 2 parameters
(define conn (mysql-connect ....))

(for ([i (in-range 10 800 10)])
  (printf "Current value of i is: ~s\n" i)
  (with-handlers ([exn:fail?
                   (lambda (e)
                     ;;(printf "Error: ~a\n" (exn-message e))
                     ;; Better way of showing exception in Racket:
                     ((error-display-handler) (exn-message e) e))])
    (define r (query conn sql_insert i (+ i 2)))
    (printf "Last Inserted ID: ~s\n"
            (dict-ref (simple-result-info r) 'insert-id #f))))
几点意见:

不要在查询中使用不会像INSERT查询那样返回行的SQL语句。 您的racketforloop子句与Python代码不对应。我建议你复习一下球拍的圈数,也许可以用简单的列表练习。例如,循环体最多执行两次。你明白为什么吗? 使用查询值获取一行、一列查询的值,如选择计数。。。查询 我在您的Python代码中没有看到任何块,所以我不确定您的意思。
错误消息是什么?``错误:在查询中:查询不返回行;声明:插入mjp_act_join_分析选择*自;上下文…:/泛型/interfaces.rkt:209:0:error*/generic/functions.rkt:90:0:compose语句/generic/functions2.rkt:64:0:在查询帮助程序中;用值调用/private/arrow val first.rkt:555:3;for循环;调用空的元连续帧;评估一个顶部;开始循环/XREP/XREP.rkt:1478:0;调用空的元继续帧/racket/repl.rkt:11:26``对于我使用的racket代码,fetch调用的值是否必须是我要加入的id键总数的一个因子,以防止迭代器在最后一个块上失败?将错误消息放在问题中,而不是放在注释中。请参阅:错误消息是什么?``错误:在查询中:查询不返回行;声明:插入mjp_act_join_分析选择*自;上下文…:/泛型/interfaces.rkt:209:0:error*/generic/functions.rkt:90:0:compose语句/generic/functions2.rkt:64:0:在查询帮助程序中;用值调用/private/arrow val first.rkt:555:3;for循环;调用空的元连续帧;评估一个顶部;开始循环/XREP/XREP.rkt:1478:0;调用空的元继续帧/racket/repl.rkt:11:26``对于我使用的racket代码,fetch调用的值是否必须是我要加入的id键总数的一个因子,以防止迭代器在最后一个块上失败?将错误消息放在问题中,而不是放在注释中。见: