如何使用 SqlQuery 一次从数据库中收集所有数据?
How can i collect all the Data from a Database by using SqlQuery at once?
我想收集数据库中的所有条目并将它们写入 .csv-file.
为此,我试图想出一个 while-loop 这样的:
def create_csv():
query = QSqlQuery(db=db)
query.prepare("SELECT * FROM database_name")
query.exec()
rec = query.record()
print(query.isSelect())
nameCol = rec.indexOf("name")
while query.next():
print(query.value(nameCol))
这按预期提供了“名称”列中的所有条目。
但是由于数据库有更多的列,
我想知道是否有更简单的方法来一次获取所有列(和 headers)?
一次完成将使 csv 的创建变得容易得多。
您可以使用一个简单的 SQL 命令来完成此操作:
select * from passtable4 LOCAL INTO OUTFILE 'C:\test.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
您可能 运行 遇到此错误:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
提供了解决方案 and
如果您的数据库有不同类型的数据类型(如日期、BLOB 等),您可以找到更全面的指南here
花了一段时间,但我想我找到了适合我的东西:
- 我开始为文件创建名称并生成了 2 个列表
- 执行的查询为我提供了 table
的所有值
- 开始 for-loop 以获得 Headers。
- 启动了一个 while 循环,为我生成临时 list-element“行”
- 将临时 list-elemt 添加到 Value-List,使其成为列表的列表
- 构建了一个 Pandas-dataframe 并根据需要使用了 to_csv。
我确信有“更聪明”或更快的方法来完成这项工作。但至少对我有用。
def create_csv(self):
today = datetime.today()
now = today.strftime("%y%m%d_%H%M_%S_")
filename = f"{jetzt}COS.csv"
Column_Header=[]
Article_Value=[]
query = QSqlQuery(db=db)
query.prepare(r"SELECT * FROM database_name")
query.exec()
rec = query.record()
for id in range(rec.count()):
Column_Header.append(rec.fieldName(id))
indexes = range(rec.count())
while query.next():
row = [query.value(index) for index in indexes]
Article_Value.append(row)
df = pd.DataFrame(Article_Value, columns=Column_Header, index=None)
print(df)
df.to_csv(filename,sep=';',index=False)
我想收集数据库中的所有条目并将它们写入 .csv-file.
为此,我试图想出一个 while-loop 这样的:
def create_csv():
query = QSqlQuery(db=db)
query.prepare("SELECT * FROM database_name")
query.exec()
rec = query.record()
print(query.isSelect())
nameCol = rec.indexOf("name")
while query.next():
print(query.value(nameCol))
这按预期提供了“名称”列中的所有条目。 但是由于数据库有更多的列, 我想知道是否有更简单的方法来一次获取所有列(和 headers)?
一次完成将使 csv 的创建变得容易得多。
您可以使用一个简单的 SQL 命令来完成此操作:
select * from passtable4 LOCAL INTO OUTFILE 'C:\test.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
您可能 运行 遇到此错误:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
提供了解决方案
如果您的数据库有不同类型的数据类型(如日期、BLOB 等),您可以找到更全面的指南here
花了一段时间,但我想我找到了适合我的东西:
- 我开始为文件创建名称并生成了 2 个列表
- 执行的查询为我提供了 table 的所有值
- 开始 for-loop 以获得 Headers。
- 启动了一个 while 循环,为我生成临时 list-element“行”
- 将临时 list-elemt 添加到 Value-List,使其成为列表的列表
- 构建了一个 Pandas-dataframe 并根据需要使用了 to_csv。
我确信有“更聪明”或更快的方法来完成这项工作。但至少对我有用。
def create_csv(self):
today = datetime.today()
now = today.strftime("%y%m%d_%H%M_%S_")
filename = f"{jetzt}COS.csv"
Column_Header=[]
Article_Value=[]
query = QSqlQuery(db=db)
query.prepare(r"SELECT * FROM database_name")
query.exec()
rec = query.record()
for id in range(rec.count()):
Column_Header.append(rec.fieldName(id))
indexes = range(rec.count())
while query.next():
row = [query.value(index) for index in indexes]
Article_Value.append(row)
df = pd.DataFrame(Article_Value, columns=Column_Header, index=None)
print(df)
df.to_csv(filename,sep=';',index=False)