我正在使用pymysql
软件包并且需要编写一个查询,该查询将获得表示特定日期的3个数字变量:年月和日 - 并使用它们。
这将是这样的:
INSERT INTO tbl1
SELECT id, user_id, search_term
FROM main_table
WHERE year = (var1) AND month = (var2) AND day = (var3);
INSERT INTO tbl2
SELECT id,user_id, find_term
FROM main_table
WHERE year = (var1) AND month = (var2) AND day = (var3);
我需要2个插入子句将使用我将在执行查询之前定义的相同var1,var2,var3。
事情是 - 为了有效 - 我需要在同一次运行中做到这一点。 我尝试使用(%s),但问题是python要求我提供6个参数而不仅仅是3个...
任何人都知道这里有什么用处? 谢谢!!!
答案 0 :(得分:1)
你可以使用python的字符串插值:
v1 = 2016
v2 = 6
v3 = 17
query = """INSERT INTO tbl1
SELECT id, user_id, search_term
FROM main_table
WHERE year = {var1}
AND month = {var2}
AND day = {var3};
INSERT INTO tbl2
SELECT id,user_id, find_term
FROM main_table
WHERE year = {var1}
AND month = {var2}
AND day = {var3};""".format(var1=v1, var2=v2,var3=v3)
print(query)
答案 1 :(得分:0)
首先 - 我想说它适用于1个查询。当我有2个(或更多)查询并且python认为它有太多变量时问题就开始了。
这是代码。
这部分是为了获得3个变量:
object TestApp extends App {
var count = 0
val actorSystem = ActorSystem()
val parentActor = actorSystem.actorOf(Props(classOf[MyParentActor]))
parentActor ! "Message 1"
parentActor ! "Message 2"
class MyParentActor extends Actor with ActorLogging{
var childActor: ActorRef = null
@throws[Exception](classOf[Exception])
override def preStart(): Unit = {
childActor = context.actorOf(Props(classOf[MyChildActor]))
}
override def receive = {
case message: Any => {
childActor ! message
}
}
override def supervisorStrategy: SupervisorStrategy = {
OneForOneStrategy() {
case _: CustomException => Restart
case _: Exception => Restart
}
}
}
class MyChildActor extends Actor with ActorLogging{
override def preRestart(reason: Throwable, message: Option[Any]): Unit = {
message match {
case Some(e) => self ! e
}
}
override def receive = {
case message: String => {
if (count == 0) {
count += 1
throw new CustomException("Exception occurred")
}
log.info("Received message {}", message)
}
}
}
class CustomException(message: String) extends RuntimeException(message)
}
这部分是用3个给定的参数执行查询:
yesterday = datetime.date.fromordinal(datetime.date.today().toordinal()-1)
year_var = yesterday.year
month_var = yesterday.month
day_var = yesterday.day
query = INSERT INTO tbl1
SELECT id, user_id, search_term
FROM main_table
WHERE year = %s AND month = %s AND day = %s ;
INSERT INTO tbl2
SELECT id,user_id, find_term
FROM main_table
WHERE year = %s AND month = %s AND day = %s ;
当我尝试使用2个插入子句运行脚本时 - 它说我需要很多变量。
我需要定义某种全局变量,而不是使用%s的东西......
Wdya认为可能吗?