sql >> Database teknologi >  >> RDS >> PostgreSQL

Tilføjelse af Postgresql til min Heroku-app - problemer med syntaksnedbrudsforespørgsler?

User er et reserveret ord i postgresql og escapes ved at omslutte det med "" Se https://stackoverflow.com/a/7651432 . I modsætning til mysql, hvor de undvigende tegn er backticks.

Du forsøger også at indsætte i en kolonne med navnet Final_Ratio men definer en kolonne Final_Gearing . For at teste jeg #m også droppe og genskabe tabellen hver kørsel. Den faste kode:

import psycopg2

# connect to remote Heroku Postgres DB
pgdb = psycopg2.connect(
   host='localhost',
   user='test',
   password='test',
   port='5432',
   database='test_stackoverflow'
   )

pgcursor = pgdb.cursor()

# verify I've got my credentials in correctly
def check_connection():
   pgcursor.execute("select version()")
   data = pgcursor.fetchone()
   print("Connection established to: ", data)

def create_table():
   sql = '''CREATE TABLE estimation_data 
   ("User" text PRIMARY KEY,
    Motor_kV integer,
     Batt_Volt decimal,
      Pinion integer,
       Spur integer,
        Final_Gearing decimal,
         Wheel_Rad decimal);'''
   pgcursor.execute(sql)
   pgdb.commit()

def drop_table():
   sql = "DROP TABLE IF EXISTS estimation_data;"
   pgcursor.execute(sql)
   pgdb.commit()



def pg_add_data(sql,val):
   pgcursor.executemany(sql, val)
   pgdb.commit()


check_connection()
drop_table()
create_table()

pgsql = '''INSERT INTO estimation_data 
   ("User", Motor_kV, Batt_Volt, Pinion, Spur, Final_Gearing, Wheel_Rad) 
   VALUES (%s, %s, %s, %s, %s, %s, %s);'''
pgval = [
      ('204.210.165.122', 2400, 16.8, 16, 54, 3.92, 2.5),
      ('204.210.165.123', 3500, 12.6, 16, 54, 3.92, 2.5),
      ('204.210.165.124', 4200, 8.4, 12, 54, 3.92, 2.5)]
pg_add_data(pgsql, pgval)

Selvom det er godt at lære det grundlæggende for et produktionssted, vil jeg stærkt anbefale at bruge et bibliotek på højt niveau som SQLalchemy.




  1. Bedste måde at håndtere LOB'er i Oracle-distribuerede databaser

  2. Java - JDBC-forbindelse

  3. Hvordan sender man en streng med ' ' (tidsstempel) i forberedt erklæring?

  4. Hvorfor er CTE bedre end cursor/afledt tabel/ underforespørgsler/temptabel osv.?