SQL 질문입니다. 많은 테이블에 같은 쿼리를 자동으로 돌리고 싶습니다.
조회수 336회
SELECT * FROM '테이블이름' ORDER BY '칼럼명' DESC Limit 30
위와 같은 쿼리를 테이블 수 만큼 돌리고 싶으며 테이블이 300개 가량 있습니다.
1/ PD 테이블에는 NameData의 테이블이름들이 들어있습니다. SELECT * FROM '테이블이름' ORDER BY High DESC Limit 30 에서 테이블 이름을 PD테이블에 있는 이름데이터를 하나씩 받아와서 Keys 테이블들을 정렬하고 싶습니다.
2/ 1번이 불가능하다면 '테이블이름' 을 하나로 정하지 않고 Keys 데이터베이스 안에 테이블들을 전부 정렬할 수 있으면 좋겠습니다.
import sqlite3
con = sqlite3.connect("PD.db")
con1 = sqlite3.connect("Keys.db")
with con1:
cur = con1.cursor()
array1 = "SELECT * from NameData" #PD안에 있는 Keys 테이블명들 입니다.
rows = cur.execute(array1)
for row in rows:
array = "SELECT * FROM '테이블이름' ORDER BY '칼럼명' DESC Limit 30"
print(row)
rows = cur.execute(array)
3/ 실행하면 PD 따로 Keys 따로 나오며 '테이블이름' 안에 arrary1을 적어도 arrary1이라는 테이블은 없다고만 나옵니다. 쿼리에는 변수가 들어가지 않나요?
DB Browser for SQLite 사용중입니다.
2 답변
-
- 파이썬을 통해 SQLite 쿼리를 실행하고 있는 것이기 때문에, (SQLite) 쿼리에는 (파이썬) 변수가 들어갈 수 있습니다.
- 그나저나
con1
은 사용을 하는데con
은 사용을 안하고 계시군요.
아마 이런 전개가 되어야 하겠죠. 테스트 안해본 코드이니 참고만 해주세요.
con = sqlite3.connect("PD.db") con1 = sqlite3.connect("Keys.db") con1tableNames = [] with con: cur = con.cursor() rows = cur.execute("SELECT tableName from NameData") for row in rows: con1tableNames.append(row['tableName']) print(con1tableNames) con1Results = [] with con1: for con1tableName in con1tableNames: cur = con1.cursor() # 이렇게 문자열 + 변수 + 문자열 = 문자열 만드는 과정을 '보간'이라고 함 rows = cur.execute("SELECT * FROM " + con1tableName + " ORDER BY col1 DESC LIMIT 30") for row in rows: con1Results.append(row) print(con1Results)
-
rows = cur1.execute( "SELECT * FROM " "[f'{con1tableName}']" "ORDER BY ...") #TypeError: can only concatenate str (not "list") to str #"SELECT * FROM " f'{con1tableName}' "ORDER BY...``" = qlite3.OperationalError: near"/" : synyax error #"SELECT * FROM " "[f'{con1tableName}']" "ORDER BY... ``" = 테이블 이름중에 f'{con1tableName}' 이 없다고 나옵니다. #"SELECT * FROM " "[BTC/USDT]" "ORDER BY...``" = 원하는 값이 나옵니다.
- +con1tableName+ 을 f 스트링으로 바꿔서 진행하니 알아듣더군요. 감사합니다.
- " [ ] " 형식으로 만들어야지 인식을 하는것 으로 보입니다.
- execute( ) 안에 큰따옴표가 붙게되면 f 스트링을 변수로 인식을 못하는걸로 보입니다.
- 큰따옴표가 없으면 rows 가 실행이 안되더군요.
- "[f'{con1tableName}']" 이게 아니라면 어떤 방법이 있는지 궁금합니다.
댓글 입력