Racket函数与SQL交互,将新行插入表中
我的目标是编写一个函数,在块中插入sql查询的以下值。该值是插入到新表中的两个表的联接。我可以让这个函数与python中的for循环一起工作,请参见下面的内容,但是我还无法为SQL for循环编写一个行为正常的Racket 任何关于如何将下面的python循环作为循环或函数编写的指导都将不胜感激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-
### 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键总数的一个因子,以防止迭代器在最后一个块上失败?将错误消息放在问题中,而不是放在注释中。见: