Python 当数据更改时,如何将“增量”值重置回1?

Python 当数据更改时,如何将“增量”值重置回1?,python,mysql,sql-server,Python,Mysql,Sql Server,目标 我的目标是使用Python将数据库记录插入MySQL。但我会详细解释的 这是我当前的脚本(功能齐全且工作正常): #Get data from SQL sqlCursor = mjmConnection.cursor() sqlCursor.execute("SELECT sol.id, p.id, p.code,p.description, p.searchRef1, so.number, c.code, c.name, sol.requiredQty \ FROM s

目标

我的目标是使用Python将数据库记录插入MySQL。但我会详细解释的

这是我当前的脚本(功能齐全且工作正常):

#Get data from SQL
sqlCursor = mjmConnection.cursor()
sqlCursor.execute("SELECT sol.id, p.id, p.code,p.description, p.searchRef1, so.number, c.code, c.name, sol.requiredQty \
    FROM salesorderline sol JOIN \
    salesorder so \
    ON sol.salesorderid = so.id JOIN \
    product p \
    ON sol.productid = p.id JOIN \
    customer c \
    ON so.customerid = c.id \
    WHERE so.orderdate > DATEADD(dd,-35,CAST(GETDATE() AS date));")

#Send recieved data from SQL query from above to MySQL database
print("Sending MJM records to MySQL Database")
mjmCursorMysql = productionConnection.cursor()
for x in sqlCursor.fetchall():
    a,b,c,d,e,f,g,h,i = x
    mjmCursorMysql.execute("INSERT ignore INTO mjm_python (id, product_id, product_code, product_description, product_weight, \
            salesorder_number, customer_code, customer_name, requiredQty) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s);", (a,b,c,d,e,f,g,h,i))


productionConnection.commit()
mjmCursorMysql.close()
sqlCursor.close()
它的作用

上述脚本执行以下操作:

  • 从SQL Server获取数据
  • 将该数据插入MySQL
  • 我在MySQL查询中特别使用了
    IGNORE
    ,以防止重复的
    id
    数字

    数据如下所示:

    下一步..

    现在-我想添加一个列名
    sales\u id\u increment
    。这将从
    1
    开始,并为每个相同的
    saleorder\u编号
    递增,当存在不同的
    saleorder\u编号
    时,将重置回
    1
    。所以我希望它看起来像这样:

    问题


    我如何做到这一点?在我的Python脚本或MySQL查询中,我需要在哪里查找?

    当您使用窗口函数从SQL Server中选择行时,可以获得此列
    行数()
    密集列()
    (如果有重复的ID):


    那正是我想要的。我将对您添加的查询进行研究,非常简短!非常感谢。@LV98我在您的问题中了解到,此查询的结果中可能存在重复项,使用IGNORE将不会插入这些重复项。在这种情况下,如果行号之间有间隙,可以更改为稠密的_RANK()窗口函数。每个记录都不应该有重复的
    id
    号,因为它是外键。一切都很好。在我自己的时间里,我还将研究
    dense\u rank()
    。我可以问你吗?你是在哪里学SQL的?请继续学习D
    SELECT sol.id, p.id, p.code,p.description, p.searchRef1, so.number, c.code, c.name, sol.requiredQty,
           ROW_NUMBER() OVER (PARTITION BY so.number ORDER BY sol.id) sales_id_increment
    FROM salesorderline sol 
    JOIN salesorder so ON sol.salesorderid = so.id 
    JOIN product p ON sol.productid = p.id 
    JOIN customer c ON so.customerid = c.id 
    WHERE so.orderdate > DATEADD(dd,-35,CAST(GETDATE() AS date));