gpt4 book ai didi

mysql - 使用字段映射表智能加载数据的 Pythonic 方式?

转载 作者:行者123 更新时间:2023-11-29 03:12:49 24 4
gpt4 key购买 nike

我有一个复杂的表格(几百列),我时不时地获取 csv 文件中的数据。我所要做的就是用 csv 文件中的数据更新表格。

这就是我现在使用的:没什么特别的(我猜不是使用 Python 的强大功能?)。如果有人可以将其翻译成 Pythonic,那就太棒了!

想法是匹配 MyTable 和 Field_Mapping 中的列名并相应地进行更新。如果该列有乘法值,它会在插入/更新时乘以该值。

抱歉,Python 代码乱七八糟,我已尽力使其可读。

MyDB.MyTable
------------

PK DateAdded Firm Addr1 Website
------------------------------------
1 2011-01-01 ABC 1 Main St abc.com

MyDB.Field_Mapping
------------------

SourceColumns TargetTableColumns Multiply
-----------------------------------------
PK PK
webaddr Website
address Addr1
assets value x1000

Python 代码:

import string, os, sys

# DB Conn String here

cursor = db.cursor()
cursor2 = db.cursor()
cursor3 = db.cursor()

TableName = sys.argv[1]

cursor.execute("select * from `" + TableName + "` limit 1")

for cursorFieldname in cursor.description:
cursor2.execute("select TargetTableColumns from MyDB.Field_Mapping where FDIC = \"" + cursorFieldname[0] + "\"")
row = cursor2.fetchone()

if row > -1:
cursor2.execute("alter table `" + TableName + "` change `" + cursorFieldname[0] + "` `" + str(row[0]) + "` varchar(255)")

cursor3.execute("create index PKIndx on `" + filename + "`(PK);")
cursor3.execute("insert ignore into MyDB.MyTable (PK, dateadded) select PK, now() from `" + TableName + "`;")
cursor3.execute("select count(*) from `" + filename + ";")
row2 = cursor3.fetchone()

if str(row2[0]) > "1000": #Deleting PKs > 1000
cursor3.execute("delete from MyDB.MyTable where PK < \"a\" and PK not in (select PK from `" + filename + "`);")

cursor.execute("select * from `" + filename + "` limit 1")

for cursorFieldname in cursor.description:
cursor2.execute("select * from MyDB.MyTable limit 1")
for cursorFieldname2 in cursor2.description:
if cursorFieldname[0].lower() == cursorFieldname2[0].lower():
cursor3.execute("select multiply from MyDB.Field_Mapping where TargetTableColumns = \"" + cursorFieldname[0] + "\"")
row2 = cursor3.fetchone()

if str(row2[0]) == "x1000":
cursor3.execute("update MyDB.MyTable as a, `" + filename + "` as b set a.`" + cursorFieldname[0] + "` = b.`" + cursorFieldname[0] + "`*1000 where a.PK = b.PK;")

elif str(row2[0]) == "%":
cursor3.execute("update MyDB.MyTable as a, `" + filename + "` as b set a.`" + cursorFieldname[0] + "` = round(b.`" + cursorFieldname[0] + "`, 2) where a.PK = b.PK;")

else:
if cursorFieldname[0] == "addr1":
cursor3.execute("update MyDB.MyTable as a, `" + filename + "` as b set a.`" + cursorFieldname[0] + "` = b.`" + cursorFieldname[0] + "` where a.PK = b.PK and b.`" + cursorFieldname[0] + "` != \"Main Street\";")

elif cursorFieldname[0] != "PK":
if cursorFieldname[0].lower() == "website":
cursor3.execute("update `" + filename + "` set website = lcase(website)")
cursor3.execute("update MyDB.MyTable as a, `" + filename + "` as b set a.`" + cursorFieldname[0] + "` = b.`" + cursorFieldname[0] + "` where a.PK = b.PK;")

cursor.close()
cursor2.close()
cursor3.close()
db.close()

最佳答案

我首先将上面的代码表示为简单的英语算法。将问题分解为您想要完成的基本部分而不是您想要如何完成它们通常会大大简化事情。

查看 database abstraction layers如果你想简化访问。 SQLAlchemy据我所知非常好。

就个人而言,如果您提供的代码有效(代码量不多),为什么要更改它? :-)

关于mysql - 使用字段映射表智能加载数据的 Pythonic 方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5515095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com