希望不要為此使用熊貓。
#create a sqllite database
#step 1: create a connection
import sqlite3
conn = sqlite3.connect('db.sqlite')
sqlcursor = conn.cursor()
###--------------------------------STEP 2: IMPORT GEOSPATIAL DATA--------------------------------###
import csv
geofile = r'geodata.csv'
with open(geofile, 'r', newline='') as csvfile:
csvdata = csv.reader(csvfile, delimiter=',')
next(csvdata, None)
csvrows = []
for row in csvdata:
if len(row[0]) < 5:
row[0] = row[0].zfill(5)
if len(row[1]) != 2:
print('state: ' row[1])
csvrows.append(tuple(row))
sqlcursor.executemany('SELECT * INTO geodata FROM VALUES(?,?,?,?,?,?);', csvrows)
conn.commit()
顯然這不起作用,但例如在 sql 中,我可以執行以下操作:
select * from
(
values
('207-544')
,('208-609')
,('208-601')
,('984-520')
,('989-318')
) AS m(combos)
所以希望使用 select into vs insert into,因為我實際上沒有一張桌子 - 并且不想事先制作一張
uj5u.com熱心網友回復:
如果您不想將其存盤在檔案中(因為您不想創建表),您可以這樣做
conn = sqlite3.connect("file::memory:?cache=shared")
并創建臨時表(結果與 類似SELECT INTO),請注意您不需要指定列型別
crt = 'CREATE TEMP TABLE t('
ins = 'INSERT INTO t VALUES('
for n in range(len(csvrows[0])):
if n:
crt = ', '
ins = ', '
crt = f'c{n}'
ins = '?'
crt = ');'
ins = ');'
sqlcursor.execute(crt)
sqlcursor.executemany(ins, csvrows)
sqlite有一個VALUES關鍵字,您可以在 aSELECT UNION或類似中使用,例如
sqlite> VALUES (0,1,2,3,4),(5,6,7,8,9) UNION SELECT * FROM sqlite_master;
0|1|2|3|4
5|6|7|8|9
但我認為這無濟于事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/360090.html
